【发布时间】:2015-01-29 14:20:24
【问题描述】:
我正在尝试使用 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 的依赖项,它本身是 @987654325 的依赖项@。
我最初认为问题出在 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
通过下面概述的一些步骤,我能够让延迟作业出现在我的 bin/staging 中。我还尝试根据延迟作业 GitHub 上的建议添加“守护进程”gem,但仍然遇到相同的错误,现在是关于“守护进程”而不是“延迟作业”本身。
【问题讨论】:
-
您确定乘客使用的是正确的红宝石吗?
-
我不确定。不幸的是,我(目前)也没有系统管理员知识来检查哪个 ruby 乘客正在使用或更改它。但是,我可以说没有 activejob 适配器的基本 rails4 分支在登台服务器上部署并运行良好。另外,我将添加一些我收集到的与 binstub 相关的更多信息,这些信息可能有用也可能没有帮助
-
不,但我确实使用 rbenv
-
你有多个 ruby 版本吗?您的应用在与默认版本不同的其他版本中运行。?
-
rbenv 安装的唯一 ruby 是 2.2.0。所以有那个和“系统”
标签: ruby-on-rails ruby ruby-on-rails-4 passenger rails-activejob