【问题标题】:Rails deployment issues when calling delayed_job:restart调用 delay_job:restart 时出现 Rails 部署问题
【发布时间】:2011-07-21 19:37:37
【问题描述】:

当我尝试运行以下任务以重新启动服务器上的延迟作业时,我收到以下错误消息。 但是,如果不运行此脚本,部署成功并且应用程序按预期运行,因此所有 gem 都已正确安装,并且 rails 2.3.8 是服务器上安装的版本。

namespace :delayed_job do 
  desc "Restart the delayed_job process"
  task :restart, :roles => :app do
    run "cd #{current_path}; RAILS_ENV=production script/delayed_job restart"
  end
end

# error
Missing the Rails 2.3.8 gem. Please `gem install -v=2.3.8 rails`, update your     RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

所有 gem 都使用 sudo 安装(/home/chris/.gem/... 文件夹实际上并不存在)

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.2
  - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [i686-linux]
  - INSTALLATION DIRECTORY: /opt/ruby1.8/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/ruby1.8/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/ruby1.8/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /opt/ruby1.8/lib/ruby/gems/1.8
     - /home/chris/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

capistrano 设置已设置为使用“chris”帐户执行部署。

任何想法为什么它找不到 rails gem?

【问题讨论】:

  • 你能从机器(作为 chris 用户)访问 Rails 控制台(脚本/控制台生产)吗?如果是,Gem.path 会返回什么?
  • 是的,rails 控制台可以正常加载,并且 Gem.path 返回的路径与运行 gem environment 时显示的路径相同。问题是我可以在登录服务器时运行脚本,但不能通过 capistrano,但所有部署任务都可以通过 capistrano 正常运行。

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


【解决方案1】:

如果您使用Bundler,您可能必须使用execute the script in the context of your bundle。这将使您的脚本了解适当的宝石。似乎即使您的 gem env 为您提供了正确的 gem 路径,您的脚本也可能不会在相同的环境配置下执行。

run "cd #{current_path}; RAILS_ENV=production bundle exec script/delayed_job restart"

或者,如果您没有使用 bundler,您可以从任务中检查 gem env 的输出,以确认脚本是否使用了正确的环境配置。尝试检查日志以获取此命令的输出。

run "cd #{current_path}; RAILS_ENV=production gem env"

我怀疑您的gem env 输出会有所不同。您也可以尝试列出该任务可用的 Gem。

run "cd #{current_path}; RAILS_ENV=production gem list"

最后,您可以检查文件 script/delayed_job 以查看它是否指向不同版本的 Ruby 或 Ruby on Rails 配置。让我们知道这些行是否存在或看起来不同:

#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))

其他参考资料

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 2013-09-30
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多