我正在尝试使用 Rails 4.2 的 ActiveJob API 实现异步电子邮件处理。到目前为止,我已经尝试使用两个受支持的适配器:Sucker Punch 和 Delayed Job,但我都遇到了同样的问题。
事情似乎在开发中正常工作。但是,在部署到登台服务器并尝试在我的浏览器中加载网站后,我得到紫色 PhusionPassenger 错误屏幕,并显示以下错误:
Could not find delayed_job-4.0.6 in any of the sources (Bundler::GemNotFound)
以上是我尝试延迟作业时的情况。我的 gem 设置如下所示:
# Gemfile
gem 'delayed_job_active_record'
# Gemfile.lock
delayed_job (4.0.6)
activesupport (>= 3.0, < 5.0)
delayed_job_active_record (4.0.3)
activerecord (>= 3.0, < 5.0)
delayed_job (>= 3.0, < 4.1)
当我尝试 Sucker Punch 时,PhusionPassenger 错误是相同的,除了据说在任何来源中都找不到的 gem 是hitimes
,它是 的依赖项celluloid
,它本身是 .的依赖项sucker_punch
。
我最初认为问题出在 Sucker Punch 上。在我的登台服务器上安装 Hitimes gem 并仍然收到错误后,我决定切换到延迟作业,现在我遇到了几乎相同的问题,所以我猜测还有一些更底层的问题,但我是不知道它可能是什么。我也尝试在登台服务器上更新捆绑器,但没有骰子。
提前感谢您的帮助!
编辑
我在 Delayed Job github 上做了更多的探索,发现了这个命令RAILS_ENV=production bin/delayed_job restart
。当我尝试在我的登台服务器上运行时,我被提醒我的目录RAILS_ENV=staging bin/delayed_job restart
中没有延迟作业 binstub 。bin/
回顾我的本地开发环境,我确实看到它bin/delayed_job
存在并且可以bin/delayed_job restart
成功运行。暂存中缺少 binstub 是否会导致问题?如果是这样,为什么没有正确创建 binstub?我很确定我的 capistrano 部署过程使用bundle exec bundle install --binstubs
.
编辑 2
通过下面概述的一些步骤,我能够让延迟作业出现在我的 bin/staging 中。我还尝试根据延迟作业 GitHub 上的建议添加“守护进程”gem,但仍然遇到相同的错误,现在是关于“守护进程”而不是“延迟作业”本身。