2 Stimmen

Rails-Einsatzprobleme beim Aufruf von delayed_job:restart

Wenn ich versuche, die folgende Aufgabe auszuführen, um delayed_jobs auf meinem Server neu zu starten, erhalte ich die folgende Fehlermeldung. Allerdings Ohne die Ausführung dieses Skripts ist die Bereitstellung erfolgreich und die Anwendung läuft wie erwartet, d.h. alle Edelsteine sind korrekt installiert und Rails 2.3.8 ist die auf dem Server installierte Version.

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.

Alle Gems werden mit sudo installiert (der Ordner /home/chris/.gem/... existiert nicht wirklich)

$ 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/

Die Capistrano-Einstellungen sind so eingerichtet, dass die Bereitstellung mit dem Konto "chris" erfolgt.

Haben Sie eine Idee, warum es den Schienenstein nicht finden kann?

0voto

fdsaas Punkte 684

Wenn Sie Folgendes verwenden Bündler müssen Sie möglicherweise das Skript im Kontext Ihres Bundles ausführen . Dadurch wird Ihr Skript auf die entsprechenden Edelsteine aufmerksam. Es scheint, als ob, obwohl Ihr gem env den richtigen gem-Pfad angibt, wird Ihr Skript möglicherweise nicht mit der gleichen Umgebungskonfiguration ausgeführt.

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

Wenn Sie Bundler nicht verwenden, können Sie auch die Ausgabe von gem env aus der Aufgabe heraus, um zu bestätigen, dass das Skript die richtige Umgebungskonfiguration verwendet oder nicht. Versuchen Sie, die Protokolle auf die Ausgabe dieses Befehls zu überprüfen.

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

Mein Verdacht ist, dass Ihr gem env unterschiedlich ausfallen. Sie können auch versuchen, die für die Aufgabe verfügbaren Edelsteine aufzulisten.

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

Schließlich können Sie auch die Datei script/delayed_job um zu sehen, ob es auf eine andere Version von Ruby oder Ruby on Rails verweist. Lassen Sie uns wissen, ob diese Zeilen existieren oder anders aussehen:

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

Zusätzliche Referenzen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X