对于我的 RubyOnRails-App,我必须在 Capistrano 部署结束时启动后台作业。为此,我在 deploy.rb 中尝试了以下操作:
run "nohup #{current_path}/script/runner -e production 'Scheduler.start' &", :pty => true
有时这可行,但大多数时候它不会启动进程(= 未在 ps -aux 中列出)。并且没有错误消息。并且没有 nohup.out,不在主目录中,也不在 rails app 目录中。
我尝试在 scheduler.rb 中使用 trap('SIGHUP', 'IGNORE') 而不是 nohup,但结果是一样的。
让它工作的唯一方法是删除 ":pty => true" 并在 "cap deploy" 结束时手动执行 Ctrl-C。但是我不喜欢这个...
还有其他机会调用这个 Scheduler.start 吗?或者获取更多错误信息?
我在服务器上使用 Rails 2.3.2、Capistrano 2.5.8、Ubuntu Hardy