使用ruby要求的参数

Joe*_*eyC 5 ruby parameters arguments require

是否可以要求带参数/参数的文件?

例如

resource.rb有

mode = ARGV.first

if mode == "prod"
  #use prod db
else
  #use test db
end
Run Code Online (Sandbox Code Playgroud)

而main.rb需要它与params类似的东西

require_relative './resource.rb prod'
Run Code Online (Sandbox Code Playgroud)

如果这是不可能或不好的做法,请告诉我.我想我可以使用版本控制在测试和prod之间切换,但它似乎有点迟钝.

(prod和测试仅用于区分.这是一个非常轻量级的项目,如果它有任何区别,则不是商业:))

在Windows XP上使用Ruby 1.9.3谢谢.

我很惊讶,这已经没有答案了.只有使用宝石和使用ruby参数但不能同时使用两者的东西.

Jea*_*ano 7

您不能通过require执行此操作,但您可以设置环境变量:

main.rb:

ENV["mode"] = ARGV.first
require_relative './resource'
Run Code Online (Sandbox Code Playgroud)

./resource.rb:

mode = ENV.fetch("mode")

if mode == "prod"
  #use prod db
else
  #use test db
end
Run Code Online (Sandbox Code Playgroud)

使用环境变量进行配置的优点是,您可以跨多个文件使用相同的逻辑.这是Heroku的做事方式.

查看Heroku的12因子应用程序.


Dog*_*ert 6

不,你不能传递参数require.

我建议做这样的事情:

def use_mode(mode)
  # your if statements
end
Run Code Online (Sandbox Code Playgroud)

然后

require 'file'
use_mode :development
Run Code Online (Sandbox Code Playgroud)

并将其包装在类/模块中以获得更清晰的代码:)