Ssh

如何使用 Capistrano 在伺服器上執行命令?

  • October 21, 2014

我有一個名為 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命令基本上都在其自己的 shell 環境中執行。因此,您需要執行以下操作:

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

但是,您不能像互動式使用那樣 script/console這種方式執行命令。script/console

你想要的是script/runner這樣的:

run "cd #{release_path} && script/runner -e production 'FeedEntry.update_all'"

我希望這會有所幫助。

你應該使用:

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

使用 capistrano 3.x

引用自:https://serverfault.com/questions/175689