【问题标题】:How can I start a Rails console with command line arguments?如何使用命令行参数启动 Rails 控制台?
【发布时间】:2016-06-10 03:26:39
【问题描述】:

我正在将 Rails 应用程序从主要版本 3 升级到 4。在以前的版本中,我们可以通过在 Application 类中将块传递给 config.before_initialize 来进入启动过程。从这里我可以指定rails c -some_cool_switch 之类的选项,并可以从ARGV 访问它。

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

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

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

原因这不再有效

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

tl;博士

在 Rails 4 中,是否可以像 rails c --some_arg 这样将参数传递给控制台,如果可以,如何?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rails-console


    【解决方案1】:

    你应该像下面这样指定参数,

    ➜  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 以获取传递的值。如果您需要更多信息,请告诉我。

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2016-12-13
      • 1970-01-01
      • 2016-10-10
      • 2014-12-21
      • 2015-02-15
      相关资源
      最近更新 更多