[英]What means 'bin' in '$ bin/rails?'
我正在嘗試按照“入門引擎”Rails指南的教程進行操作,並發現:
$ bin/rails plugin new blorgh --mountable
當我在終端上輸入時,我得到:
bash: bin/rails: No such file or directory
當我嘗試$ rails
它可以正常工作。
我一直在使用命令行幾個月,還有Rails。 我知道$符號,但我對此之后“bin”的含義感到困惑。 我習慣在$之后輸入“Rails”,但本教程說使用“bin”...
bin/
是什么意思?
運行bundle install --binstubs
,它會工作。 你只需要做一次,Bundler會記住你要求它(對於那個項目)。
當您使用bundle --binstubs
安裝bundle時,Bundler會將所有特定於bundle --binstubs
安裝到bin/
子目錄(相對於Gemfile),而不是將它們放入gemset的全局binstub路徑中。
您通常會這樣做:
rails
binstub是Gemfile中的那個(與之后安裝到gemset中的不同版本相反,與Bundler分開),以及 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/
version設置了BUNDLE_GEMFILE
環境變量,它需要bundler/setup
,這就是告訴Bundler用gem路徑做的事情。 bin/rails
腳本具有捆綁器感知功能,並且可以識別您的Gemfile,因此它可以立即為您的環境做好准備。
我通常建議在gemset版本上使用--binstubs
和bin/x
調用。
考慮這種情況:
我有一個使用Rails版本4.0.0的應用程序。 我的目標是將其升級到Rails 4.1.9。 為此,我嘗試逐步升級:首先升級到4.0.13,然后升級到4.1,最后升級到4.1.9。
一切順利。 所有的測試都是使用RSpec進行的。
最后,我嘗試用rails s
運行我的服務器。 Booom! Ruby崩潰了。 然后,我使用了bin/rails s
。 一切都很好。
所以我認為如果你的系統中設置了不同版本的rails,那么使用bin/rails
選項會更安全。
PS為了確保我的假設是正確的,我刪除了除4.1.9之外的所有rails版本然后我嘗試用rails s
重新運行服務器。 這次沒有崩潰。
希望這澄清一下。
在基於unix的操作系統中通過shell運行可執行文件時,將首先搜索系統路徑。 要查看$PATH
所有目錄,請在終端提示符下嘗試:
echo $PATH
rails可執行文件將出現在列出的目錄之一中。
編輯 - 下面的文字是完全錯誤的,道歉
(可選)從rails目錄的根目錄,您可以在bin目錄中運行可執行文件。 要做到這一點,也就是說,為了確保您運行本地可執行文件而不是$PATH
可執行文件,您需要一個'。' 在命令之前。 所以,
./bin/rails
不
bin/rails
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.