为什么 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 会抱怨第一个参数是意外的,并且可能会中止。