我有一个佣金任务
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 string "id: 5"
被解释为单个字符串。
我们不允许将哈希传递到佣金任务吗?
答案 0 :(得分:11)
我使用类似查询字符串的参数并使用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"}}
答案 1 :(得分:1)
当您通过终端发出rake任务时,您处于UNIX或Bash环境中,因此您需要遵守该语言的规则,据我所知,该规则不包括哈希。我可能错了。
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc5
这并不意味着编写rake任务的人没有做一些聪明的事情来将字符串解析为哈希。如果我是你,并试图找出它,我会看看源代码,看看该rake任务如何解析它的变量。
PS。如果它是你正在使用的宝石并且你也在使用捆绑器,你可以发出bundle open gem_name
来打开源,rake任务通常以.rake结尾......
答案 2 :(得分:0)
尝试将任务中的:p变量声明为哈希值? :p => {}
任务:post_hit,[:host,:title,:description,:model,:num_assignments,:reward,:lifetime,:qualifications,:p => {},:opts