web-dev-qa-db-ja.com

Capistranoを使用してサーバー上でコマンドを実行する方法は?

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(ディレクトリを変更)できないのはなぜですか?

ありがとう!

3
yuval

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'"

それがお役に立てば幸いです。

6
rjk

次を使用する必要があります。

execute "cd #{release_path} && script/console production"

Capistrano3.xを使用

6
czerasz

これを行う適切な方法は、次のように使用することです。

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
1