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

时间:2010-08-28 18:00:09

标签: ruby-on-rails deployment 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(更改目录)到站点目录中运行命令?

谢谢!


更新:选择了一个答案,非常感谢所有回复的人。 最好的答案可能实际上是one on server fault,尽管两者的要点(服务器故障和堆栈溢出上的一个)是相同的。

2 个答案:

答案 0 :(得分:1)

我无法想象你能够从capistrano远程登录rails控制台。我建议你从rake任务中调用你的模型方法。

How do I run a rake task from Capistrano?

至于问题的后半部分,您是否使用与capistrano相同的用户帐户登录服务器?

答案 1 :(得分:1)

您想使用script / runner。它启动应用程序的实例以执行您要调用的方法。它的速度很慢,因为它必须加载所有的rails应用程序。

~/user/mysite.com/current/script/runner -e production FeedEntry.update_all 2>&1

你可以从capistrano任务中运行它。