Ruby on rails 调用延迟的作业时出现Rails部署问题:重新启动

Ruby on rails 调用延迟的作业时出现Rails部署问题:重新启动,ruby-on-rails,capistrano,delayed-job,Ruby On Rails,Capistrano,Delayed Job,当我尝试运行以下任务以在服务器上重新启动延迟的\u作业时,我收到以下错误消息但是,如果不运行此脚本,部署将成功,应用程序将按预期运行,因此所有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=pr

当我尝试运行以下任务以在服务器上重新启动延迟的\u作业时,我收到以下错误消息但是,如果不运行此脚本,部署将成功,应用程序将按预期运行,因此所有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/…文件夹)

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

你知道为什么它找不到rails gem吗?

如果你正在使用,你可能不得不这么做。这将使您的脚本了解适当的宝石。看起来,即使
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或RubyonRails配置。让我们知道这些线是否存在或看起来是否不同:

#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
其他参考资料

如果您正在使用,您可能必须。这将使您的脚本了解适当的宝石。看起来,即使
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或RubyonRails配置。让我们知道这些线是否存在或看起来是否不同:

#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
其他参考资料


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