如何使用 Capistrano 在服务器上执行命令?

yuv*_*val 3 ssh deployment ruby-on-rails capistrano

我有一个非常简单的任务叫做 update_feeds:

desc "Update feeds"
task :update_feeds do
  run "cd #{release_path}"
  run "script/console production"
  run "FeedEntry.update_all"
end
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行此任务时,都会收到以下消息:

[out :: mysite.com] sh: script/console: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想这是因为我不在正确的目录中,但正在尝试

run "cd ~/user/mysite.com/current"
Run Code Online (Sandbox Code Playgroud)

代替

run "cd #{release_path}"
Run Code Online (Sandbox Code Playgroud)

也失败了。手动(通过 ssh)运行完全相同的命令非常有效。为什么 capistrano 不能正确cd(更改目录)到站点目录来运行命令?

谢谢!

rjk*_*rjk 6

每个run命令基本上都在其自己的 shell 环境中执行。因此,您需要执行以下操作:

run "cd #{release_path} && script/console production"
Run Code Online (Sandbox Code Playgroud)

但是,您不能 script/console这种方式运行命令script/console用于交互使用。

你想要的是script/runner这样的:

run "cd #{release_path} && script/runner -e production 'FeedEntry.update_all'"
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。


cze*_*asz 6

你应该使用:

execute "cd #{release_path} && script/console production"
Run Code Online (Sandbox Code Playgroud)

使用 capistrano 3.x