【问题标题】:Pass an argument when calling a script in Rails console with load command使用 load 命令在 Rails 控制台中调用脚本时传递参数
【发布时间】:2015-04-29 05:09:51
【问题描述】:

我知道使用 ARGV 数组访问命令参数,但我遇到了一个问题。我有一个无法独立运行的脚本,而是需要在 rails 控制台中运行。有没有办法在调用文件时传递参数?

load '/tmp/test.rb'

我试着把它放在引号里面,外面和一时兴起尝试

感谢您提供的任何帮助!

【问题讨论】:

  • 你能解释一下为什么你不能独立运行它吗?似乎是这个问题。
  • 它是一个从我的rails实例中导出对象和附件的脚本,需要引用和搜索对象。

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


【解决方案1】:

这是一种肮脏的技巧,但似乎您可以将数组分配给 ARGV 并根据需要从加载的脚本中使用它:

$  Temp  cat argv.rb
p ARGV
$  Temp  irb
2.1.0 :001 > ARGV
 => []
2.1.0 :002 > load 'argv.rb'
[]
 => true
2.1.0 :003 > ARGV = ['A', 'B']
(irb):3: warning: already initialized constant ARGV
 => ["A", "B"]
2.1.0 :004 > load 'argv.rb'
["A", "B"]
 => true
2.1.0 :005 >

【讨论】:

    【解决方案2】:

    你可以这样做:

    bundle exec rails runner /tmp/test.rb argument1 argument2
    

    【讨论】:

    • 谢谢,这是有道理的,但我的控制台需要很长时间才能加载。我只使用参数来防止必须手动编辑脚本中的输入文件变量保存并再次加载它。手动进行此更改最终比每次加载控制台要快。
    • 对于未来的观众来说,这是技术上正确的答案,但另一个对我的情况更有用
    • 如何捕捉这些参数? paramsparameters... 或者您如何编写 test.rb 代码以将“argument1”和“argument2”捕获为两个变量?
    • @AlbertCatalà 在您的 ruby​​ 脚本中,您可以使用 ARGV 特殊变量访问所有参数。 ARGV 是一个数组,包含所有从命令行传递给脚本的字符串形式的参数。
    • 谢谢,终于找到了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多