如何将数组作为参数传递给Rake任务?

Nat*_*ong 28 ruby rake

我正在写一个Rake任务,我想传递一个数组作为其中一个参数.这就是我目前的方式.

task :change_statuses, :ids, :current_status, :new_status do |task, args|
  puts "args were #{args.inspect}"
end
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方式运行任务:

# First argument as array
rake "change_statuses[[1,2,3], active, inactive]"

# First argument as string
rake "utility:change_account_statuses['1,2,3', foo, bar]"
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

args were {:ids=> [1,2,3], :current_status=> 2 , :new_status=> 3}
Run Code Online (Sandbox Code Playgroud)

但是,我在每种情况下的实际输出是:

args were {:ids=>"[1", :current_status=>"2", :new_status=>"3]"}
Run Code Online (Sandbox Code Playgroud)

如何将数组传递给Rake任务?

And*_*rew 36

其中一个问题是避免,字符串中的符号,因此您的命令行将如下所示:

$ rake change_statuses['1 2 3', foo, bar]
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地拆分ID:

# Rakefile

task :change_statuses, :ids, :current_status, :new_status do |task, args|
  ids = args[:ids].split ' '

  puts "args were #{args.inspect}"
  puts "ids were #{ids.inspect}"
end
Run Code Online (Sandbox Code Playgroud)

或者您可以解析ids值以获得预期的输出:

args[:ids] = args[:ids].split(' ').map{ |s| s.to_i }
Run Code Online (Sandbox Code Playgroud)

我正在使用rake 0.8.7

  • 请注意,当使用params调用rake任务时,逗号后应该没有空格,否则bash会误解它,你会得到一个错误,比如`不知道如何构建任务blahblah [param,'`.所以上面的例子应该是`rake change_statuses ['1 2 3',foo,bar]` (4认同)

小智 5

您也可以尝试稍微改变一下方法,并尝试使用该arg.extras方法获取 ids。

$ rake change_statuses[foo, bar, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
task :change_statuses, [:foo, :bar] do |_task, args|
  puts args[:foo]     # => foo
  puts args[:bar]     # => bar
  puts args.extras    # => ["1","2","3"]
end
Run Code Online (Sandbox Code Playgroud)

您可以在本文中找到更多信息 -> https://blog.stevenocchipinti.com/2013/10/18/rake-task-with-an- Arguments-number-of-arguments/