9

レーキタスクがあります

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文字列"id: 5"は単一の文字列として解釈されていました。

タスクをレーキするためにハッシュを渡すことは許可されていませんか?

4

3 に答える 3

14

クエリ文字列のようなパラメータを使用して、それらを解析します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"}}
于 2013-09-17T13:35:16.817 に答える
1

ターミナルを介してrakeタスクを発行するときは、UNIXまたはBash環境にいるため、その言語の規則に従う必要があります。私が知る限り、ハッシュは含まれていません。私は間違っているかもしれません。

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

これは、rakeタスクを作成した人が、文字列をハッシュに解析するために巧妙なことをしなかったことを意味するものではありません。私があなたであり、それを理解しようとすると、ソースコードを見て、そのrakeタスクがその変数をどのように解析するかを確認します。

PS。それが使用しているgemであり、bundlerも使用している場合は、発行bundle open gem_nameしてソースを開くことができます。通常、rakeタスクは.rakeで終了します...

于 2012-05-09T22:00:54.753 に答える
0

タスクで:p変数をハッシュとして宣言してみてください。:p => {}

task:post_hit、[:host、:title、:description、:model、:num_assignments、:reward、:lifetime、:qualifications、:p => {}、:opts

于 2012-05-09T21:06:39.947 に答える