【问题标题】:How to solve the "You need to add gem 'daemons' to your Gemfile if you wish to use it" error in production mode?如何解决生产模式下的“如果您想使用它,您需要将 gem 'daemons' 添加到您的 Gemfile”错误?
【发布时间】:2012-03-31 00:19:36
【问题描述】:

我正在尝试正确使用 Capistrano 和 RVM,以便将我的 Ruby on Rails 3.2.2 应用程序部署到运行 Ubuntu 10.04 LTS 的远程机器上。它接缝解决了我之前与“Rvm - Capistrano integration on Linux Ubuntu”相关的问题。但是,在部署时,我收到以下与 DelayedJob gem 相关的错误:

    ...
  * executing "cd /srv/www/<APP_NAME>/releases/20120314135318 && bundle install"
    servers: ["<DOMAIN>"]
    [<DOMAIN>] executing command
    [<DOMAIN>] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/releases/20120314135318 && bundle install'     ** [out :: <DOMAIN>] Using rake (0.9.2.2)
 ** [out :: <DOMAIN>] Using builder (3.0.0)
    ...
 ** [out :: <DOMAIN>] Using daemons (1.1.8)
 ** [out :: <DOMAIN>] Using delayed_job (3.0.1)
 ** [out :: <DOMAIN>] Using delayed_job_active_record (0.3.2)
    ...
 ** [out :: <DOMAIN>] Your bundle is complete! It was installed into /srv/www/<APP_NAME>/shared/bundle
    ...
    [<DOMAIN>] executing command
    [<DOMAIN>] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/current;  RAILS_ENV=production script/delayed_job stop'
*** [err :: <DOMAIN>] /usr/local/rvm/gems/ruby-1.9.3-p125/gems/delayed_job-3.0.1/lib/delayed/command.rb:4:in `rescue in <top (required)>'
*** [err :: <DOMAIN>] :
*** [err :: <DOMAIN>] You need to add gem 'daemons' to your Gemfile if you wish to use it.
*** [err :: <DOMAIN>] (
*** [err :: <DOMAIN>] RuntimeError
*** [err :: <DOMAIN>] )
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/delayed_job-3.0.1/lib/delayed/command.rb:1:in `<top (required)>'
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require'
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `block in require'
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:236:in `load_dependency'
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require'
*** [err :: <DOMAIN>] from script/delayed_job:4:in `<main>'
    command finished in 7512ms
*** [deploy:update_code] rolling back
    ...

failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/releases && tar xzf /tmp/20120314140345.tar.gz && rm /tmp/20120314140345.tar.gz'" on <DOMAIN>

即使错误解释是“如果你想使用它,你需要将 gem 'daemons' 添加到你的 Gemfile 中”,我已经将 daemons gem 添加到我的 Gemfile (从上面的输出中你甚至可以注意我是“使用守护进程(1.1.8)”):

...
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'daemons'
...

那么,有什么问题?我该如何解决?


在我的deploy.rb 文件中,我有:

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, 'ruby-1.9.3-p125'
set :rvm_type, :user
require 'bundler/capistrano'
...

P.S.:终端窗口输出:

 $ ruby -v
 > ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
 $ which ruby
 > /usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby

【问题讨论】:

  • 脚本/delayed_job 是不是你的?它需要捆绑器吗?
  • @shingara - “是不是你的”是什么意思?使用“script/delayed_job”,您指的是什么文件?但是,上面的代码/输出都是“我的”(也就是说,代码和输出都是“真实的”/“我正在使用和得到的”)。
  • 在日志中你失败的命令是:RAILS_ENV=production script/delayed_job stop我想知道这个脚本是生成的还是你创建的。
  • @shingara - 该输出指的是 DelayedJob 工作人员。它是通过运行config/deploy.rb 文件中的"cd #{current_path}; #{try_sudo} RAILS_ENV=production script/delayed_job -n 2 start" 代码生成的。

标签: ruby-on-rails ruby rvm capistrano delayed-job


【解决方案1】:

使用捆绑器运行脚本/延迟作业: bundle exec script/delayed_job start

【讨论】:

  • 您的代码不起作用,我得到“bundler: command not found: RAILS_ENV=production - Install missing gem executables with 'bundle install'”(当然我尝试在服务器机器上运行bundle install,但它不会更新任何 gem,因为所有这些都已经更新)。我也尝试使用“bundle exec rake script/delayed_job stop”,但出现此错误:rake aborted! Don't know how to build task 'stop'
  • 1-delayed_job 脚本不是 rake 任务,所以 rake 当然不能工作。 2- 看起来你错误地修改了我的命令。尝试像RAILS_ENV=production bundle exec script/delayed_job start 一样将环境移动到前面。请注意,这必须从应用程序根目录运行。
  • 别忘了使脚本/delayed_job 文件可执行:chmod +x script/delayed_job
猜你喜欢
  • 2013-10-16
  • 2015-05-07
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2014-06-10
  • 1970-01-01
相关资源
最近更新 更多