2016-10-28 16 views
0

は、レールの起動スクリプトは、次のコードを持っている理由:ARGV.shiftがレールに起動スクリプト

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/ and Gem::Version.correct?($1) then 
    version = $1 
    ARGV.shift 
    end 
end 

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

はなぜARGV.shiftをやっていますか?私たちが議論を消費した後、あるいは何らかの理由でそれを行う必要があるのであれば、それはARGVを扱う標準的な方法ですか?

+0

私の疑問は、最後の行にロードされているGemが 'ARGV 'で渡された引数を使用し、起動スクリプト自体のための最初の引数が制御の前に' ARGV'から削除される必要があるということですRailsが未知の議論について不平を言うのを防ぐためにRailsに渡されました。 – Linuxios

+0

はい、意味があります。このラッパーコードは、このバージョン設定機能を与えるためにすべてのgemに追加されます。 ARGV定数がRailsに渡されていることを認識していませんでした。ありがとう –

+0

それはあなたの質問に答える、私はそれを答えることができます。 – Linuxios

答えて

1

おそらくこれは、RailsがARGVを使用して独自のコマンドライン引数を読み取るためです。 Railsを起動する前に起動スクリプトがその引数(最初のもの)をARGVから削除できなかった場合、Railsは予期しない最初の引数について文句を言い、おそらく中断します。

関連する問題