0

我正在尝试使用 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,但仍然遇到相同的错误,现在是关于“守护进程”而不是“延迟作业”本身。

4

2 回答 2

0

很可能是没有您的 binstub,可以修复:

capistrano-bundler 存在一个“问题”,因为它会尝试生成自己的 bin 存根,而不是从提交的 git repo 中获取它们。这已经得到修复,但可以在这个问题中看到: 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。

于 2015-01-29T15:41:51.367 回答
0

事实证明,问题不在于 ActiveJob 适配器,而在于我在升级 Rails 4 后尝试安装和在 staging 中使用的任何gem。我在登台服务器上安装了 rbenv 并添加了 2.2.0 作为全局 ruby​​,但Passenger 仍在寻找与系统 ruby​​ (1.9.3) 相关联的 gem。

于 2015-02-01T01:49:14.943 回答