为什么在rails启动脚本中使用ARGV.shift

时间:2016-10-28 17:48:15

标签: ruby-on-rails ruby command-line-arguments

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?($1) then
    version = $1
    ARGV.shift
  end
end

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

我们为什么要ARGV.shift?在我们消费争论之后,或者我们是否因某种原因需要这样做时,它只是处理ARGV的规范方式吗?

1 个答案:

答案 0 :(得分:1)

这很可能是因为Rails使用ARGV来读取自己的命令行参数。如果启动脚本在启动Rails之前未能从ARGV删除其参数(第一个),Rails会抱怨意外的第一个参数,并且可能会中止。