我有一个瑞克任务
task :post_hit, [:host, :title, :description, :model, :num_assignments, :reward, :lifetime, :qualifications, :p, :opts] => :environment do |t, args|:p需要是一个散列,但如果我尝试:
rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{id: 5},{}]它错误地说id:不能被解析(空格似乎做了一些事情)。
如果我试过:
rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{"id: 5"},{}]who字符串"id: 5"被解释为单个字符串。
我们不允许将散列传递给rake任务吗?
发布于 2012-05-10 06:00:55
当您通过终端发出rake任务时,您是在UNIX或Bash环境中,因此您需要遵守该语言的规则,据我所知,这些规则不包括散列。不过,我可能错了。
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc5
这并不意味着编写rake任务的人没有做一些聪明的事情来将字符串解析为散列。如果我是你,我会看一下源代码,看看rake任务是如何解析它的变量的。
PS。如果它是你正在使用的gem,并且你也在使用.rake,你可以发出bundle open gem_name来开源,rake任务通常会在一个gem中结束...
发布于 2013-09-17 21:35:17
我使用类似查询字符串的参数,并用Rack::Utils.parse_nested_query解析它们
我是这样做的:
require 'rack/utils' # needed for Rack::Utils.parse_nested_query
namespace :foo do
task :bar, [ :args_expr ] => :environment do |t, args|
args.with_defaults(:args_expr => "name=abdo&fruits[]=bananas&fruits[]=dates")
options = Rack::Utils.parse_nested_query(args[:args_expr])
puts options
end
end我这样称呼它:(注意数组和散列是如何传递的)
bundle exec rake "foo:bar[name=abdo&fruits[]=apples&fruits[]=oranges&hash[foo]=bar&hash[cool]=notmuch]"输出:
{"name"=>"abdo", "fruits"=>["apples", "oranges"], "hash"=>{"foo"=>"bar", "cool"=>"notmuch"}}发布于 2012-05-10 05:06:40
尝试将任务中的:p变量声明为散列可能?:p => {}
任务:post_hit,[:主机,:标题,:描述,:模型,:奖励,:生命周期,:资格,:p => {},:opts
https://stackoverflow.com/questions/10523661
复制相似问题