سؤال

أحاول أن اتبع على طول "الشروع في العمل مع محركات" القضبان دليل تعليمي وجدت هذا:

$ bin/rails plugin new blorgh --mountable

عندما اكتب هذا على محطة بلدي ، وأحصل على:

bash: bin/rails: No such file or directory

عندما أحاول فقط $ rails يعمل موافق.

لقد تم استخدام سطر الأوامر لبضعة أشهر ، والقضبان كذلك.أنا أعرف علامة but ولكن أنا في حيرة حول معنى " بن " بعد ذلك.أنا معتاد على كتابة " القضبان "مباشرة بعد $ ، ولكن هذا البرنامج التعليمي يقول أن استخدام" بن"...

ماذا يفعل bin/ يعني?

هل كانت مفيدة؟

المحلول

ليرة تركية ؛ دكتور

تشغيل bundle install --binstubs وأنها سوف تعمل.لديك فقط للقيام بذلك مرة واحدة وسوف بوندلر تذكر أنك طلبت ذلك (لهذا المشروع).

إجابة أطول

عند تثبيت حزمة مع bundle --binstubs, ، سيقوم المجمع بتثبيت جميع مجموعات الحزم الخاصة بك في bin/ دليل فرعي (نسبة إلى جيمفيل) ، بدلا من وضعها في مسارات بينستوب العالمية جيمسيت.

عادة ما تفعل هذا من أجل:

  1. تأكد من أن rails بينستوب كنت تقوم بتشغيل هو واحد في جيمفيل الخاص بك (بدلا من إصدار مختلف التي حصلت على تثبيت في جيمسيت الخاص بك في وقت لاحق ، منفصلة عن بوندلر) ، و
  2. لتحسين وقت التنفيذ (لأنه يعادل وظيفيا bundle exec rails باستثناء ناقص استدعاء عملية فرعية واحدة).

بينستوبس العالمية مقابل بوندلر بينستوبس

إذا قمت بكتابة which rails, ، سوف تحصل على مسار طويل مثل /usr/local/rvm/gems/jruby-1.7.18/bin/rails, ، ومحتويات منها: cat `which rails`

#!/usr/bin/env jruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'railties', version
load Gem.bin_path('railties', 'rails', version)

بعد الجري bundler --binstubs, ، إذا كنت cat bin/rails, ، ستحصل على شيء مثل:

#!/usr/bin/env jruby
#
# This file was generated by Bundler.
#
# The application 'rails' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('railties', 'rails')

الفرق الرئيسي هناك هو أن bin/ الإصدار يحدد BUNDLE_GEMFILE متغير البيئة ، ويتطلب ذلك bundler/setup, ، وهو ما يخبر بوندلر أن يفعل شيئا مع مسارات الأحجار الكريمة.ال bin/rails البرنامج النصي هو علم بوندلر ، ويدرك جيمفيل الخاص بك ، لذلك يمكن أن تعد البيئة الخاصة بك الحق قبالة الخفافيش.

أوصي عموما باستخدام --binstubs و bin/x الدعوات على إصدارات الأحجار الكريمة.

نصائح أخرى

النظر في هذا السيناريو:

كان لي التطبيق الذي كان يستخدم القضبان الإصدار 4.0.0.كان هدفي لترقيته إلى القضبان 4.1.9.للقيام بذلك ، حاولت ترقيته خطوة بخطوة:أولا ، الترقية إلى 4.0.13 ، ثم 4.1 وأخيرا 4.1.9.

كل شيء سار بسلاسة.جميع الاختبارات كانت تمر باستخدام رسبك.

وأخيرا ، حاولت تشغيل الخادم الخاص بي مع rails s.بووم!تحطمت روبي.ثم ، اعتدت bin/rails s.كل شيء سار على ما يرام.

لذلك أعتقد أنه إذا كان لديك إصدار مختلف من القضبان التي تم إعدادها في نظامك ، فسيكون استخدامها أكثر أمانا bin/rails الخيار.

سكرتير خاص.للتأكد من أن افتراضي صحيح ، قمت بإزالة جميع إصدار القضبان باستثناء 4.1.9 ثم حاولت إعادة تشغيل الخادم باستخدام rails s.لا تحطم هذه المرة.

نأمل أن يوضح هذا.

عند تشغيل ملف قابل للتنفيذ عبر شل في نظام تشغيل قائم على يونكس ، سيتم البحث في مسار النظام أولا.لرؤية كافة الدلائل في الخاص بك $PATH, ، جرب هذا من موجه المحطة الطرفية:

echo $PATH

ستكون القضبان القابلة للتنفيذ موجودة في أحد الدلائل المدرجة.

تحرير-النص أدناه خاطئ تماما ، اعتذاري

اختياريا ، من جذر دليل القضبان الخاص بك ، يمكنك تشغيل الملف القابل للتنفيذ في الدليل بن.للقيام بذلك ، وهذا هو ، للتأكد من أنك تقوم بتشغيل قابل للتنفيذ المحلي وليس واحد وجدت في الخاص بك $PATH, كنت في حاجة الى '.'قبل الأمر.لذا,

./bin/rails

لا

bin/rails

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top