2012-05-09 15 views
5

Mam zadanie natarciaPrzełęcz Hash jako parametr Rake zadanie

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

:p musi być hash, ale gdy próbuję:

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

ramę błędy się mówiąc, że id: mógł nie parsować (przestrzeń wydawała się coś zrobić).

Gdybym spróbował:

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

WHO ciąg "id: 5" był interpretowany jako jeden ciąg.

Czy nie wolno nam przekazywać skrótów, aby wykonywać zadania?

Odpowiedz

1

Po uruchomieniu zadania rake za pośrednictwem terminala, znajdujesz się w środowisku UNIX lub Bash, więc musisz przestrzegać reguł tego języka, które, o ile mogę powiedzieć, nie zawierają skrótów. Mogę się mylić.

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

To nie znaczy, że ktokolwiek napisał zadaniem natarcia nie zrobić coś mądrego do analizowania ciąg do mieszania. Gdybym był tobą i próbowałem to rozgryźć, rzuciłbym okiem na kod źródłowy i zobaczyłem, jak to zadanie rake'a analizuje jego zmienne.

PS. Jeśli jest to klejnot, którego używasz, a także używasz bundler'a, możesz wydać bundle open gem_name, aby otworzyć źródło, zadania rake zazwyczaj kończą się na .rake ...

0

Spróbuj zadeklarować swoją: zmienną p w zadaniu jako hash? P => {}

zadanie: post_hit [: gospodarza: tytuł: opis,: model: num_assignments,: nagroda: Żywotność,: kwalifikacje, p => {}: wybiera

8

Używam parametrów podobnych do querystringów i parsuję je Rack::Utils.parse_nested_query

Oto jak to zrobić

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 

A ja nazywam to tak: (zauważ jak tablice i hashe są przekazywane)

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

Wyjście:

{"name"=>"abdo", "fruits"=>["apples", "oranges"], "hash"=>{"foo"=>"bar", "cool"=>"notmuch"}} 
Powiązane problemy