我的RubyOnRails应用需要在Capistrano部署结束时启动后台作业。为此,我在deploy.rb中尝试了以下内容:
run "nohup #{current_path}/script/runner -e production 'Scheduler.start' &", :pty => true
有时这个方法可行,但大部分时间它无法启动进程 (= 不会在 ps -aux 中列出)。并且没有错误消息。同时,在 home 目录和 rails 应用程序目录中都没有 nohup.out 文件。我尝试在 scheduler.rb 中使用 trap('SIGHUP', 'IGNORE') 替换 nohup,但结果相同。
唯一的方法是删除 ":pty => true" 并在 "cap deploy" 结束时手动 Ctrl-C。但我不喜欢这种方式...
还有其他调用 Scheduler.start 的机会吗?或者能获得更多错误消息吗?
我正在使用 Rails 2.3.2、Capistrano 2.5.8 和 Ubuntu Hardy 服务器。