代码之家  ›  专栏  ›  技术社区  ›  Yuval Karmi

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

  •  0
  • Yuval Karmi  · 技术社区  · 14 年前

    我有一个非常简单的任务叫做更新提要:

    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)运行完全相同的命令可以很好地工作。 为什么卡皮斯特拉诺不能正常 cd (更改目录)进入站点目录以运行命令?

    谢谢!


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

    2 回复  |  直到 14 年前
        1
  •  1
  •   inkdeep    14 年前

    您要使用脚本/运行程序。它启动应用程序的一个实例来执行要调用的方法。它的速度很慢,因为它必须加载所有的Rails应用程序。

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

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

        2
  •  1
  •   Community CDub    7 年前

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

    How do I run a rake task from Capistrano?

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