Rails 4.2 ActiveJob: Every adapter results in PhusionPassenger error: Could not find [gem] in any of the sources (Bundler::GemNotFound)

Rails 4.2 ActiveJob: Every adapter results in PhusionPassenger error: Could not find [gem] in any of the sources (Bundler::GemNotFound)

我正在尝试使用 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,它是 [=13= 的依赖项],它本身就是 sucker_punch 的依赖项。

我最初以为是 Sucker Punch 的问题。在我的登台服务器上安装 Hitimes gem 后仍然出现错误,我决定切换到延迟作业,现在我遇到了几乎相同的问题,所以我猜还有一些更底层的问题,但我不确定它可能是什么。我也试过在登台服务器上更新捆绑器,但没有骰子。

在此先感谢您的帮助!

编辑

我在延迟作业 github 上做了更多的探索,发现了这个命令 RAILS_ENV=production bin/delayed_job restart。当我尝试在我的登台服务器上 运行 RAILS_ENV=staging bin/delayed_job restart 时,我被警告我的 bin/ 目录中缺少 delayed_job binstub。回头看我本地的开发环境,确实看到bin/delayed_job存在,可以运行bin/delayed_job restart成功。暂存中缺少 binstub 是否会导致该问题?如果是这样,为什么没有正确创建 binstub?我很确定我的 capistrano 部署过程使用 bundle exec bundle install --binstubs.

编辑 2

通过下面概述的一些步骤,我能够让 delayed_job 出现在我的垃圾箱/暂存区中。我还尝试根据有关延迟作业 GitHub 的建议添加 "daemons" gem,但仍然出现相同的错误,现在关于 "daemons" 而不是 "delayed_job" 本身.

可能是你的binstub不存在,可以修复:

有一个带有 capistrano-bundler 的 'issue',因为它会尝试生成自己的 bin 存根,而不是从提交的 git 仓库中获取它们。这已被修复,但可以在这个问题中看到: https://github.com/capistrano/bundler/issues/45

您可以通过从链接目录中删除 bin 来强制使用已提交的 binstub,因此:

set :linked_dirs, fetch(:linked_dirs, []).push('bin', 'log', 'tmp/pids', 'tmp/cache' ...

变为:

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache' ...

并设置

set :bundle_binstubs, nil

或者升级你的 cap-bundler gem。

事实证明,问题不在于 ActiveJob 适配器,而在于 any gem,我在执行 Rails 4升级。我已经在登台服务器上安装了 rbenv 并添加了 2.2.0 作为全局 ruby,但 Passenger 仍在寻找与系统 ruby (1.9.3) 关联的 gems。