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

问题描述:

我有一个非常简单的任务称为update_feeds:如何使用Capistrano在服务器上执行命令?

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,尽管两者的要点(服务器故障和堆栈溢出故障)都是相同的。

你想使用脚本/跑步者。它启动应用程序的一个实例来执行你想调用的方法。它的速度很慢,因为它必须加载所有的rails应用程序。

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

你可以从capistrano任务运行。

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

How do I run a rake task from Capistrano?

至于你的问题的后半部分,你登录到使用相同的用户帐户Capistrano的服务器?