7

Sinatraアプリをherokuにデプロイしましたが、アプリには2つのrakeタスクが含まれています。

task :create_db , [:db_id , :db_name]
task :destroy_db , [:db_id, :token] 

私が走るとき

heroku run rake -T

コンソールで、Herokuは次の応答を出力します。

(in /app)
rake create_db[db_id,db_name]  # Creation count database task
rake destroy_db[db_id,token]   # Destroy database task

しかし、私が実行すると:

heroku run rake create_db['test', 'test database']

次のエラーで応答します。

(in /app)
rake aborted!
Don't know how to build task 'create_db[test,'
/usr/local/lib/ruby/1.9.1/rake.rb:1720:in `[]'
/usr/local/lib/ruby/1.9.1/rake.rb:2040:in `invoke_task'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `each'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/local/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:1992:in `run'
/usr/local/bin/rake:31:in `<main>'

なぜこれが失敗するのかはよくわかりませんが、文字列引数に関係していると思います。上記のように、「タスク'create_db [test'をビルドする方法がわからない」と表示され、テストは文字列なしで表示されます。

このタスクをコマンドラインから実行する方法を知っていますか?

4

3 に答える 3

17

Rakeドキュメントから:

rakeタスク名とその引数は、rakeを実行するための単一のコマンドライン引数である必要があります。これは通常、スペースがないことを意味します。スペースが必要な場合は、rake+引数文字列全体を引用符で囲む必要があります。このようなもの:

rake "name[billy bob, smith]"

(引用規則はオペレーティングシステムとシェルによって異なるため、OS /シェルの適切なドキュメントを参照してください)。

また、個々のパラメーターを引用する必要がないことにも注意してください。

あなたの場合、これはうまくいくはずです:

rake "create_db[test, test database]"

これも機能します:

rake create_db[test,'test database']

2番目のパラメーターは引用符で囲まれていますが、コンマと引用符の間にスペースがないため、シェルはすべてを単一の引数として扱います。

Herokuについて

これは、を使用して機能しませんheroku run。この場合、コマンドはシェルによって2回解釈されます。1回は自分自身で、もう1回はHeroku Dynoで解釈されるため、Herokuで実行されるコマンドの引用符が正しいことを確認する必要があります。

引用符をエスケープする必要があります。

heroku run rake \"create_db[test, test database]\"

Dynoで実行されるコマンドがrake "create_db[test, test database]";になるようにします。または引用符を引用します:

heroku run rake "create_db[test,'test database']"

実行されるコマンドはですrake create_db[test,'test database']

于 2013-01-03T14:28:57.507 に答える
2

理由

$ heroku run rake create_db ['test'、'test database']

パラメータ間/パラメータ内のスペースが原因で動作しません。以下が動作します。

$ heroku run rake "create_db ['test'、'test database']"

于 2013-02-05T03:06:47.833 に答える
1

私にとってこれはうまくいきます

heroku run rake "namespace:task['var1','var2']"
于 2013-09-11T16:08:52.050 に答える