2012-05-09 27 views
5

Tengo una tarea rakePass hash como parámetro a Rastrillo Tarea

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

:p necesidades para ser un hash, pero si trato:

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

él los errores hacia fuera diciendo que podía id: no ser analizado (el espacio parecía hacer algo).

Si tratara:

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

la cadena que "id: 5" estaba siendo interpretado como una sola cadena.

¿No se nos permite pasar hashes a las tareas de rake?

Respuesta

1

Cuando emite una tarea de rake a través del terminal, se encuentra en el entorno UNIX o Bash, por lo que debe obedecer las reglas de ese idioma, que hasta donde yo sé no incluye hash. Sin embargo, podría estar equivocado.

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

Esto no quiere decir que quien escribió la tarea rake no hacía algo inteligente para analizar una cadena en un hash. Si yo fuera tú y tratara de resolverlo, echaría un vistazo al código fuente y vería cómo esa tarea rake analiza sus variables.

PS. Si se trata de una gema que está utilizando y está utilizando el paquete también, puede emitir bundle open gem_name para abrir el origen, las tareas de rastreo generalmente terminan en un arrastre ...

0

Intenta declarar tu variable: p en la tarea como un hash tal vez? : P => {}

tarea: post_hit, [: host,: título,: descripción,: modelo,: num_assignments,: recompensa,: de por vida,: calificaciones,: p => {},: opta

8

Utilizo parámetros tipo querystring y los analizo con Rack::Utils.parse_nested_query

Así es como lo hago

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 

y lo llaman así: (nótese cómo se transmiten los arrays y hashes)

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

Salida:

{"name"=>"abdo", "fruits"=>["apples", "oranges"], "hash"=>{"foo"=>"bar", "cool"=>"notmuch"}} 
Cuestiones relacionadas