为什么 ARGV.shift 在 rails 启动脚本中
Why ARGV.shift in rails startup script
rails的启动脚本有以下代码:
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?() then
version =
ARGV.shift
end
end
gem 'railties', version
load Gem.bin_path('railties', 'rails', version)
我们为什么要做 ARGV.shift
?在我们消耗了一个参数之后,这只是一种处理 ARGV 的规范方式,还是我们出于某种原因需要这样做?
这很可能是因为 Rails 使用 ARGV
读取它自己的命令行参数。如果启动脚本在启动 Rails 之前未能从 ARGV
中删除它的参数(第一个参数),Rails 会抱怨第一个参数是意外的,并且可能会中止。
rails的启动脚本有以下代码:
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?() then
version =
ARGV.shift
end
end
gem 'railties', version
load Gem.bin_path('railties', 'rails', version)
我们为什么要做 ARGV.shift
?在我们消耗了一个参数之后,这只是一种处理 ARGV 的规范方式,还是我们出于某种原因需要这样做?
这很可能是因为 Rails 使用 ARGV
读取它自己的命令行参数。如果启动脚本在启动 Rails 之前未能从 ARGV
中删除它的参数(第一个参数),Rails 会抱怨第一个参数是意外的,并且可能会中止。