我使用延迟作业 gem 来处理我的电子邮件传递。它在开发中运行良好,我对此非常满意。但是,在部署到服务器后,当我使用命令时:
RAILS_ENV=production script/delayed_job start
它会起作用。我已经检查了日志文件和数据库,一切都很好,我可以按预期收到邮件。但是,当我退出服务器时,什么都不会发生。
我已经使用 sequel pro 检查了我的数据库,看到延迟的作业在数据库中创建了一行,并且在run_at列中的时间之后,该行将消失,但无法收到任何邮件。当我再次登录时,延迟的作业进程仍在运行,日志并不奇怪,但我只是无法收到我想要的电子邮件。我不能一直保持自我登录状态。没有延迟的工作,我可以使用传统方式,它工作正常但很慢。为什么注销服务器后延迟的作业失败?
这是我在配置/初始值设定项/delay_job.rb 中的延迟作业设置
require "bcrypt"
Delayed::Worker.max_attempts = 5
Delayed::Worker.delay_jobs = !Rails.env.test?
Delayed::Worker.destroy_failed_jobs = false
附言我不确定这是否与独立乘客有关,因为我必须使用不同版本的导轨,所以我必须使用带有端口 3002 的独立乘客。
我已经找到了解决方案。
通读完这 https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-jobs_are_silently_removed_from_the_database
我很快意识到我可能会错过配置文件中的"需要 bcrypt"。
我使用 RVM 并且有许多宝石镶嵌,但只有这个特定的宝石镶嵌有宝石 bcrypt-ruby。注销系统后,延迟的作业可能会使用全局或默认 gemset,因此我在所有 gemset 中安装了 bcrypt-ruby 并重新启动独立乘客,它可以工作!
但是,我仍然不知道 bcrypt 和延迟作业之间的联系。