2012-05-09 22 views
5

Tôi đã có một công việc càođèo Hash như Parameter để Rake công tác

task :post_hit, [:host, :title, :description, :model, :num_assignments, :reward, :lifetime, :qualifications, :p, :opts] => :environment do |t, args| 

:p nhu cầu trở thành một băm, nhưng nếu tôi cố gắng:

rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{id: 5},{}] 

Nó lỗi ra nói rằng id: thể không được phân tích cú pháp (không gian dường như làm điều gì đó).

Nếu tôi cố gắng:

rake turkee:post_hit["http://www.staging.collegesportsbluebook.com","LS Info","Fill In Player First Name","MechanicalTurk",100,0.01,2,{},{"id: 5"},{}] 

những người chuỗi "id: 5" đã được giải thích như là một chuỗi duy nhất.

Chúng tôi không được phép chuyển băm thành công việc cào?

Trả lời

1

Khi bạn phát hành tác vụ cào thông qua thiết bị đầu cuối, bạn đang ở trong môi trường UNIX hoặc Bash, vì vậy bạn cần phải tuân thủ các quy tắc của ngôn ngữ đó, theo như tôi có thể nói không bao gồm băm. Tôi có thể sai mặc dù.

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc5

này không có nghĩa là bất cứ ai đã viết nhiệm vụ cào không làm điều gì đó thông minh để phân tích một chuỗi thành một băm. Nếu tôi là bạn và cố gắng tìm ra nó, tôi sẽ xem xét mã nguồn và xem cách tác vụ rake đó phân tích các biến của nó như thế nào.

PS. Nếu đó là đá quý bạn đang sử dụng và bạn cũng đang sử dụng trình bao, bạn có thể phát hành bundle open gem_name để mở nguồn, các tác vụ cào ... thường kết thúc bằng một .rake ...

0

Hãy thử khai báo biến p: của bạn trong tác vụ dưới dạng băm có thể? : p => {}

công việc: post_hit, [: host,: title,: description,: model,: num_assignments,: reward,: lifetime,: qualifications,: p => {},: opts

8

Tôi sử dụng tham số kiểu chuỗi truy vấn và phân tích chúng bằng Rack::Utils.parse_nested_query

đây là cách tôi làm điều đó

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 

và tôi gọi nó là như thế này: (chú ý cách mảng và băm được thông qua)

bundle exec rake "foo:bar[name=abdo&fruits[]=apples&fruits[]=oranges&hash[foo]=bar&hash[cool]=notmuch]" 

Đầu ra:

{"name"=>"abdo", "fruits"=>["apples", "oranges"], "hash"=>{"foo"=>"bar", "cool"=>"notmuch"}} 
Các vấn đề liên quan