由于 delayed_job 重新加载,工头在开发过程中中止
Foreman aborting during development because of delayed_job reload
我正在使用工头来 运行 我的服务器和本地开发环境的延迟工作流程。
延迟作业会定期自动重新加载我的代码,如果我在代码中出现语法错误,延迟作业进程将退出并导致工头停止所有其他进程。这意味着如果我在我的开发环境中保存一个错误的文件就会停止。
堆栈跟踪中的关键行是(我相信):
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 也可以重新加载我的 类。有没有办法让延迟的作业尝试重新加载,但如果重新加载失败则保持 运行ning?如果没有,是否有其他方法可以关闭延迟作业的重新加载?
我的同事建议将延迟的作业包装在一个脚本中,如果它意外退出则重新启动它(在 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
这个脚本完成了我们需要的工作。
我正在使用工头来 运行 我的服务器和本地开发环境的延迟工作流程。
延迟作业会定期自动重新加载我的代码,如果我在代码中出现语法错误,延迟作业进程将退出并导致工头停止所有其他进程。这意味着如果我在我的开发环境中保存一个错误的文件就会停止。
堆栈跟踪中的关键行是(我相信):
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 也可以重新加载我的 类。有没有办法让延迟的作业尝试重新加载,但如果重新加载失败则保持 运行ning?如果没有,是否有其他方法可以关闭延迟作业的重新加载?
我的同事建议将延迟的作业包装在一个脚本中,如果它意外退出则重新启动它(在 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
这个脚本完成了我们需要的工作。