如何使用命令行参数启动 Rails 控制台?

How can I start a Rails console with command line arguments?

我正在将一个 Rails 应用程序从主版本 3 升级到主版本 4。在以前的版本中,我们可以通过将一个块传递给 config.before_initialize 在我们的Applicationclass。从这里我可以指定 rails c -some_cool_switch 之类的选项,并可以从 ARGV.

访问它

在 Rails 4 中,我什至无法到达此块中的撬线,因为我收到以下错误 invalid option: --foobar (OptionParser::InvalidOption)

我将深入研究源代码,找出除了猴子补丁之外我还能做些什么,并会向您报告。我希望其他人有更好的解决方案,或者至少知道我走错了路。

我总是可以回退到 SOME_ENV_VAR=some_cool_switch rails c 之类的东西,只使用另一个 ENV 变量,但我想知道我的选择,以及这是否是更好的方法。

不再有效的原因

railties gem 已更改。之前在 Rails 3 上,直到在 Console 上调用 start 时才解析命令行参数。现在,命令行在应用程序初始化之前被解析,并且选项是严格的,因此会引发错误。

tl;博士

在Rails 4中,是否可以像rails c --some_arg一样向控制台传递参数,如果可以,怎么办?

您应该指定如下参数,

➜  test_app git:(master) ✗ RAILS_E=rails_test rails c -- --rails_env_test test
Loading development environment (Rails 4.2.1)
[1] pry(main)> ARGV
=> ["--rails_env_test", "test"]
[2] pry(main)> 

➜  test_app git:(master) ✗ RAILS_E=rails_test rails c -- --rails_env_test=test               
Loading development environment (Rails 4.2.1)
[1] pry(main)> ARGV
=> ["--rails_env_test=test"]
[2] pry(main)> 

然后你可以处理ARGV来获取传递的值。如果您需要更多信息,请告诉我。