Проблемы развертывания Rails при вызове delayed_job: restart - PullRequest
2 голосов
/ 24 марта 2011

Когда я пытаюсь запустить следующую задачу для перезапуска delayed_jobs на моем сервере, я получаю сообщение об ошибке ниже. Однако , без запуска этого сценария развертывание прошло успешно, и приложение работает как положено, поэтому все гемы установлены правильно, а 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.

Все гемы устанавливаются с использованием 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'.

Есть идеи, почему он не может найти драгоценный камень рельсов?

1 Ответ

0 голосов
/ 20 июня 2012

Если вы используете Bundler , вам может потребоваться выполнить скрипт в контексте вашего пакета .Это даст вашему сценарию понимание соответствующих драгоценных камней.Кажется, что даже если ваш gem env дает вам правильный путь к самоцвету, ваш скрипт может не выполняться с той же конфигурацией среды.

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 будет отличаться.Вы также можете попробовать перечислить гемы, доступные для задачи.

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'))

Дополнительные ссылки

...