Capistrano benutzerdefinierten task schlägt fehl, weil "Schienen erfordert RubyGems >= 1.3.2"

StackOverflow https://stackoverflow.com/questions/1807416

  •  05-07-2019
  •  | 
  •  

Frage

Meine benutzerdefinierte capistrano-Aufgabe "app:Beispiel" schlägt mit der folgenden Fehlermeldung:

mnylen ilmo-on-rails $ cap app:sample
* executing `app:sample'
* executing "export RAILS_ENV=production; cd /home/mnylen/ilmo-on-rails/current; ruby script/coursegen 10"
servers: ["rails.cs.helsinki.fi"]
* establishing connection to gateway `melkinpaasi.cs.helsinki.fi'
* Creating gateway using melkinpaasi.cs.helsinki.fi
* establishing connection to `rails.cs.helsinki.fi' via gateway
Password: 
[rails.cs.helsinki.fi] executing command
*** [err :: rails.cs.helsinki.fi] Rails requires RubyGems >= 1.3.2. Please install RubyGems and try again: http://rubygems.rubyforge.org
command finished
failed: "sh -c 'export RAILS_ENV=production; cd /home/mnylen/ilmo-on-rails/current; ruby script/coursegen 10'" on rails.cs.helsinki.fi

Bin ich etwas fehlt oder etwas falsch machen?Die Aufgabe ist:

namespace :app do
  desc "Run sample data on production2
  task :sample do
    run "export RAILS_ENV=production; cd #{current_path}; ruby script/coursegen 10"
  end
end

Wenn ich führen Sie den gleichen Befehl von den tatsächlichen server, it works fine.

War es hilfreich?

Lösung 2

Okay, Problem gelöst.

Das problem war, dass es zwei Ruby-Installationen auf dem Produktions-server.

Die .Profil - Datei unter meinem home-Verzeichnis auf dem Produktions-server legen Sie die PFAD - environment-variable zeigt auf die richtige Ruby-version.

laufen Befehl, so scheint es, nicht die Quelle der .Profil Datei-und so läuft ruby script/coursegen 10 in der Aufgabe verwendet, die falsche Ruby version, das war der Grund für die seltsame Fehlermeldung über RubyGems version.Dies erklärt auch, warum es funktionierte, wenn Sie manuell ausgeführt, den Befehl von Produktions-Servern shell.

Meine Lösung war die Verwendung vollständigen Pfad zum Ruby-executable in meinem task ausführen, wie diese:

run "export RAILS_ENV=production; cd #{current_path}; /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby script/coursegen 10"

Natürlich, dies ist nicht hübsch, aber es funktioniert.Wenn jemand keine schöneren Lösungen, wäre ich mehr als froh, verwenden Sie diese stattdessen.:)

Andere Tipps

Cap wird den Remote-Befehl als ein unerwartetes Benutzer ausgeführt wird - und dass Benutzer nicht über den richtigen Pfad und Juwel in Ruby. Überprüfen Sie die Einstellungen in Ihrem Rezept für :user und :use_sudo. Lesen Sie sorgfältig die Kappe Ausgabe zu sehen, welche Benutzer verbunden wird. Ich sehe Sie einen :gateway verwenden; es können zwei Benutzer in diesem Fall sein. Ein an das Gateway zu verbinden, und eine andere, um tatsächlich laufen Befehle auf dem Zielserver.

Scheint, wie Sie Ihre RubyGems auf dem Remote-Server aktualisieren sollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top