我有一个非常简单的任务叫做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,尽管两者的要点(服务器故障和堆栈溢出上的一个)是相同的。
答案 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任务中运行它。