2008-09-29 7 views
10

Ich suche nach Möglichkeiten, eine Ruby on Rails-App (die auf JRuby läuft) zu einer Tomcat-Instanz zum Testen bereitzustellen.Wie kann eine JRuby on Rails-Anwendung am besten auf Tomcat bereitgestellt werden?

Die Tomcat-Instanz läuft auf einem Solaris-Server, mit dem ich SSH betreiben kann. Ich habe mir Capistrano angeschaut, aber es scheint nicht viel los zu sein, um es für Tomcat zu verwenden oder es sogar unter JRuby zu betreiben, und ich treffe weiterhin Fehler in Capistrano aufgrund der Windows/JRuby-Umgebung mein PC läuft (ja, es ist Corporate - nicht meine Wahl, aber ich muss damit leben).

Ich benutze Warble, um die WAR-Datei zu erstellen, und die App wird bereitgestellt und funktioniert ordnungsgemäß, sobald ich sie manuell kopiere und deploye. Ich möchte etwas einfacheres und automatisierteres, um es dort zu bekommen.

Wer hat das schon mal gemacht? Dokumentation im Internet scheint ziemlich dünn.

Antwort

3

Ich habe nicht viel Erfahrung auf diesem, so weiß ich nicht, ob ich Ihnen den besten Weg geben kann, aber wenn Capistrano nicht funktioniert, und Sie können nicht eine separate MRI-Installation nur zum Laufen haben es, haben Sie nur ein paar Alternativen links:

Versuchen Ebene Rake laufen und Ihr eigenes Implementierungsziel schreiben: http://www.gra2.com/article.php/deploy-ruby-on-rails-applications-rake

oder Ant oder Maven verwenden.

Oder wenn es nur ein Server ist, zu dem Sie bereitstellen müssen, könnten Sie einfach zwei Ruby-Skripte hacken - eine, die auf dem Server für Shutdown/Startup-Anfragen lauscht, und einen lokalen, zu dem Sie laufen: Shutdown, scp über die Datei, Start senden.

Übrigens, haben Sie irgendwelche Integrationsfehler, die Sie bei Capistrano gefunden haben, beim JRuby-Team eingereicht? Ich bin sicher, dass sie sich freuen würden, einen Beitrag zu haben. :)

+0

Große, endete dieser Ansatz rund um die einfachste zu sein auf. Beendet mit plink.exe anstelle von SSH (auf Windows). Ich habe ein paar Korrekturen für die Capistrano Probleme, die ich getroffen habe, und ein paar andere Fehler, die ich nicht behoben habe. Ich werde sie bei capistrano einreichen :) – madlep

2

Vielleicht lohnt sich der Blick auf "Vlad der Deployer" es fügt Remote_task zu Rake damit Sie Aufgaben auf einem Remote-Server ausführen können. Persönlich jedoch bevorzuge ich eine Standard-Rake-Aufgabe auf dem Server, ssh in und führen Sie diese Aufgabe - die dann eine Svn Checkout machen würde, machen Sie die WAR-Datei, was auch immer ...

15

Ich verwende ein Rails-Projekt mit JRuby und stelle es auf einem Tomcat-Server bereit. Ich habe mich entschieden, mit Capistrano zu arbeiten, weil es fast alles automatisiert. Ich hatte ein paar kleinere Änderungen an Capistrano unter Deployment Lifecycle zu machen, um es auf Tomcat laufen zu bekommen:

Schritt 1: Ich habe eine warble Aufgabe auf dem Server ausgeführt werden, nachdem Capistrano den Code aktualisiert:

desc "Run the warble command to deploy the site" 
namespace(:deploy) do 
    task :warble do 
    run ". ~/.profile;cd #{release_path};warble" 
    end 
end 

Und hakte es in Capistrano Lebenszyklus mit:

after 'deploy:update_code', 'deploy:warble' 

Mein Tomcat-Server verfügt über einen symbolischen Link auf die von Dassel erstellt #{release_path}/tmp/war Verzeichnis zeigt. Wenn Ihnen das nicht gefällt, können Sie die Warble-Aufgabe einfach ändern, um stattdessen die War-Datei in das Tomcat-Verzeichnis zu verschieben.

Schritt 2: Ich overrode die deploy:start und deploy:stop Aufgaben, so dass sie den Tomcat-Server anstelle eines Mischlings Server kick off:

desc "Starts the Tomcat Server" 
namespace(:deploy) do 
    task :start do 
    sudo "#{tomcat_home}/bin/startup.sh" 
    end 
end 

desc "Shutdown the Tomcat Server" 
namespace(:deploy) do 
    task :stop do 
    sudo "#{tomcat_home}/bin/shutdown.sh" 
    end 
end 

Ich betreibe Capistrano Aufgaben mit MRT statt der JRuby-Interpreter.