【问题标题】:Foreman aborting during development because of delayed_job reload由于 delay_job 重新加载,工头在开发过程中中止
【发布时间】:2015-05-22 16:40:39
【问题描述】:

我正在使用 foreman 为我的开发环境在本地运行我的服务器和延迟的作业流程。

延迟作业会定期自动重新加载我的代码,如果我在代码中出现语法错误,延迟作业进程将退出并导致工头也停止所有其他进程。这意味着如果我在我的开发环境中保存一个错误的文件,就会停止。

堆栈跟踪的关键行是(我相信):

17:22:18 delayed_jobs.1  | rake aborted!
17:22:18 delayed_jobs.1  | SyntaxError: /home/james/dev/myproject/app/helpers/icon_helper.rb:11: syntax error, unexpected end-of-input, expecting keyword_end
...
17:22:18 delayed_jobs.1  | /home/james/.rvm/gems/ruby-2.2.1@mygemset/gems/actionpack-4.2.1/lib/action_dispatch/middleware/reloader.rb:55:in `prepare!'
17:22:18 delayed_jobs.1  | /home/james/.rvm/gems/ruby-2.2.1@mygemset/gems/delayed_job-4.0.6/lib/delayed/worker.rb:298:in `reload!'
...
17:22:18 delayed_jobs.1  | Tasks: TOP => jobs:work
17:22:18 delayed_jobs.1  | (See full trace by running task with --trace)
17:22:18 delayed_jobs.1  | exited with code 1
17:22:18 system          | sending SIGTERM to all processes
17:22:18 webserver.1     | Exiting
17:22:18 webserver.1     | terminated by SIGTERM

我知道我可以用config.cache_classes = false 阻止delayed_job 重新加载,但我希望这是真的,以便我的网络服务器在每次请求时重新加载类。

我希望喜欢delayed_job 也能重新加载我的课程。有没有办法让延迟的作业尝试重新加载但如果重新加载失败则继续运行?如果没有,是否有其他方法可以关闭延迟作业的重新加载?

【问题讨论】:

    标签: ruby-on-rails delayed-job foreman


    【解决方案1】:

    我的同事建议将延迟的作业包装在一个脚本中,如果它意外退出就会重新启动它(在myproject/script/delayed_job.sh):

    #!/bin/bash
    while true; do
        bundle exec rake jobs:work
        echo 'Delayed jobs quit... restarting in 5s'
        sleep 5
    done
    

    Procfile 中的:

    delayed_jobs: script/delayed_jobs.sh
    

    这个脚本完成了我们需要的工作。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2014-05-13
      • 2014-12-24
      • 2012-07-13
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2018-01-02
      • 2013-05-05
      相关资源
      最近更新 更多