ماذا يعني 'بن' في ' bin بن / القضبان?'
-
26-12-2019 - |
سؤال
أحاول أن اتبع على طول "الشروع في العمل مع محركات" القضبان دليل تعليمي وجدت هذا:
$ bin/rails plugin new blorgh --mountable
عندما اكتب هذا على محطة بلدي ، وأحصل على:
bash: bin/rails: No such file or directory
عندما أحاول فقط $ rails
يعمل موافق.
لقد تم استخدام سطر الأوامر لبضعة أشهر ، والقضبان كذلك.أنا أعرف علامة but ولكن أنا في حيرة حول معنى " بن " بعد ذلك.أنا معتاد على كتابة " القضبان "مباشرة بعد $ ، ولكن هذا البرنامج التعليمي يقول أن استخدام" بن"...
ماذا يفعل bin/
يعني?
المحلول
ليرة تركية ؛ دكتور
تشغيل bundle install --binstubs
وأنها سوف تعمل.لديك فقط للقيام بذلك مرة واحدة وسوف بوندلر تذكر أنك طلبت ذلك (لهذا المشروع).
إجابة أطول
عند تثبيت حزمة مع bundle --binstubs
, ، سيقوم المجمع بتثبيت جميع مجموعات الحزم الخاصة بك في bin/
دليل فرعي (نسبة إلى جيمفيل) ، بدلا من وضعها في مسارات بينستوب العالمية جيمسيت.
عادة ما تفعل هذا من أجل:
- تأكد من أن
rails
بينستوب كنت تقوم بتشغيل هو واحد في جيمفيل الخاص بك (بدلا من إصدار مختلف التي حصلت على تثبيت في جيمسيت الخاص بك في وقت لاحق ، منفصلة عن بوندلر) ، و - لتحسين وقت التنفيذ (لأنه يعادل وظيفيا
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