Ssh
如何使用 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
(更改目錄)進入站點目錄執行命令?謝謝!
每個
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