如何使用命令行参数启动 Rails 控制台?
How can I start a Rails console with command line arguments?
我正在将一个 Rails 应用程序从主版本 3 升级到主版本 4。在以前的版本中,我们可以通过将一个块传递给 config.before_initialize
在我们的Application
class。从这里我可以指定 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来获取传递的值。如果您需要更多信息,请告诉我。
我正在将一个 Rails 应用程序从主版本 3 升级到主版本 4。在以前的版本中,我们可以通过将一个块传递给 config.before_initialize
在我们的Application
class。从这里我可以指定 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来获取传递的值。如果您需要更多信息,请告诉我。