Tyl*_*itt 8 hash rake ruby-on-rails
我有一个佣金任务
task :post_hit, [:host, :title, :description, :model, :num_assignments, :reward, :lifetime, :qualifications, :p, :opts] => :environment do |t, args|
Run Code Online (Sandbox Code Playgroud)
:p 需要是一个哈希,但如果我尝试:
rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{id: 5},{}]
Run Code Online (Sandbox Code Playgroud)
它错误地说id:无法解析(空间似乎做了一些事情).
如果我试过:
rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{"id: 5"},{}]
Run Code Online (Sandbox Code Playgroud)
who字符串"id: 5"被解释为单个字符串.
我们不允许通过哈希来耙任务吗?
Abd*_*bdo 12
我使用类似查询字符串的参数并用它们解析它们 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
Run Code Online (Sandbox Code Playgroud)
我这样称它:(注意如何传递数组和哈希)
bundle exec rake "foo:bar[name=abdo&fruits[]=apples&fruits[]=oranges&hash[foo]=bar&hash[cool]=notmuch]"
Run Code Online (Sandbox Code Playgroud)
输出:
{"name"=>"abdo", "fruits"=>["apples", "oranges"], "hash"=>{"foo"=>"bar", "cool"=>"notmuch"}}
Run Code Online (Sandbox Code Playgroud)
当您通过终端发出 rake 任务时,您处于 UNIX 或 Bash 环境中,因此您需要遵守该语言的规则,据我所知,这些规则不包括哈希值。但我可能是错的。
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc5
这并不意味着编写 rake 任务的人没有采取一些巧妙的措施将字符串解析为哈希值。如果我是你并试图弄清楚它,我会查看源代码并了解 rake 任务如何解析它的变量。
附言。如果您正在使用这是一个 gem 并且您也在使用捆绑器,您可以发出命令bundle open gem_name来打开源代码,rake 任务通常以 .rake 结尾...
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |