Update_feedsという非常に単純なタスクがあります。
desc "Update feeds"
task :update_feeds do
run "cd #{release_path}"
run "script/console production"
run "FeedEntry.update_all"
end
このタスクを実行しようとすると、次のメッセージが表示されます。
[out :: mysite.com] sh: script/console: No such file or directory
私は正しいディレクトリにいないからだと思いましたが、
run "cd ~/user/mysite.com/current"
の代わりに
run "cd #{release_path}"
また失敗します。まったく同じコマンドを手動で(sshを介して)実行すると、完全に機能します。コマンドを実行するために、capistranoがサイトディレクトリに適切にcd
(ディレクトリを変更)できないのはなぜですか?
ありがとう!
各run
コマンドは、基本的に独自のシェル環境内で実行されます。したがって、次のようなことを行う必要があります。
run "cd #{release_path} && script/console production"
ただし、コマンドを実行することはできませんinscript/console
このようにscript/console
はインタラクティブ使用法です。
あなたが欲しいのはscript/runner
そのようです:
run "cd #{release_path} && script/runner -e production 'FeedEntry.update_all'"
それがお役に立てば幸いです。
次を使用する必要があります。
execute "cd #{release_path} && script/console production"
Capistrano3.xを使用
これを行う適切な方法は、次のように使用することです。
within variable_with_the_folder_path do
execute :command, parameter
end
例えば:
# Bower Cache Clean:
bower_path = fetch(:bower_path)
within bower_path do
execute :node, "#{bower_path_to_bin}", 'cache clean'
end