2011-11-21 11 views
5

Desidero essere in grado di mostrare un'applicazione jruby rails 3.1 a Heroku.Come distribuire JRuby Rails 3.1.x su Heroku

Heroku ora supporta Java: http://blog.heroku.com/archives/2011/08/25/java/ Presumibilmente, dovrebbe essere possibile distribuire un'applicazione JRuby rails. c'è un tutorial qui per Java semplice: http://devcenter.heroku.com/articles/java e un altro qui: http://devcenter.heroku.com/articles/spring-mvc-hibernate

Ecco un tutorial per un'applicazione JRuby Sinatra su Heroku: http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ Al fine di ottenere questo lavoro, ho avuto utilizzare rubino non JRuby durante l'esecuzione di Heroku , poiché heroku si arresta se rvm usa jruby.

Al fine di eseguire il comando

mvn package 

Ho dovuto correre questo:

bundle --gemfile=/home/justin/github/sinatra-jruby-heroku/Jemfile install temple 
bundle --gemfile=/home/justin/github/sinatra-jruby-heroku/Jemfile update 

ho creato l'applicazione:

heroku create jg1-sinatra --stack cedar 

ho spinto il file di Heroku, ma quando l'app è stata avviata, si è arrestata in modo anomalo. ? :(

Qualche consiglio Sto indovinando che non passerà molto tempo prima Heroku ha un tutorial su questo

file di registro da Heroku:.

2011-11-21T08:30:40+00:00 heroku[slugc]: Slug compilation started 
2011-11-21T08:31:17+00:00 heroku[api]: Deploy 3bccec5 by [email protected] 
2011-11-21T08:31:17+00:00 heroku[api]: Release v7 created by [email protected] 
2011-11-21T08:31:18+00:00 heroku[web.1]: State changed from crashed to created 
2011-11-21T08:31:18+00:00 heroku[slugc]: Slug compilation finished 
2011-11-21T08:31:20+00:00 heroku[web.1]: Starting process with command `sh script/jruby -S trinidad -p 17687` 
2011-11-21T08:31:20+00:00 app[web.1]: Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar 
2011-11-21T08:31:20+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: org/jruby/Main 
2011-11-21T08:31:20+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: org.jruby.Main 
2011-11-21T08:31:20+00:00 app[web.1]: at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.security.AccessController.doPrivileged(Native Method) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
2011-11-21T08:31:20+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
2011-11-21T08:31:20+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
2011-11-21T08:31:20+00:00 app[web.1]: Could not find the main class: org.jruby.Main. Program will exit. 
2011-11-21T08:31:20+00:00 heroku[web.1]: Process exited 
2011-11-21T08:31:21+00:00 heroku[web.1]: State changed from starting to crashed 
+0

Questo dice che non riesce a trovare la libreria JRuby. Lo hai incluso nel tuo pacco? Il pacchetto viene eseguito localmente? –

risposta

2

Hai questa linea:

Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar 

cuciture devi riferimento al repository locale da qualche parte e Heroku di corse non ce l'ho. non so tanto di packaging, ma può essere questo riferimento appare Qui ?

Controllare tutti i ref e vedere opzioni di packaging potrebbe essere un buon inizio ...

+0

@justingordon, il tuo tentativo è effettivamente riuscito dopo aver provato questa risposta? Sarebbe bene sapere dei tuoi progressi :) –

+0

heroku ora supporta JRuby direttamente ... – justingordon

4

Come di Bundler 1.2 si sono ora in grado di specify the Ruby implementation and version nel vostro Gemfile. La cosa bella di questo è che Heroku comprenderà queste impostazioni e preparerà la tua applicazione Heroku per il tuo ambiente.

Prendete questo Gemfile ad esempio:

source "https://rubygems.org" 

ruby "1.9.3" 

gem "rails" 
gem "puma" 

Cosa c'è di interessante di questo è che di default Celadon Cedar utilizza Rubino 1.9.2. Tuttavia, quando si specifica ruby "1.9.3" nello Gemfile verrà effettivamente compilato Ruby 1.9.3 per il proprio ambiente Heroku.

Ora, se si desidera aggiungere una diversa implementazione Ruby per l'ambiente di Heroku, è possibile farlo in questo modo:

source "https://rubygems.org" 

ruby "1.9.3", :engine => "jruby", :engine_version => "1.7.0.preview1" 

gem "rails" 
gem "puma" 

Ora che sarà installare e utilizzare JRuby 1.7.0.preview1 in Ruby 1.9 modalità per la tua applicazione Heroku al momento dell'implementazione. Definirà anche le giuste opzioni JVM nelle variabili d'ambiente Heroku.

La cosa migliore è che questo è fornito con lo Heroku buildpack ufficiale, quindi non è necessario passare a un pacchetto di build di terze parti per far funzionare JRuby/JVM su Heroku. Anche se non l'ho ancora fatto funzionare, questo should also work with Rubinius, ma credo che sia attualmente buggato. O quello, o lo sto facendo male.

Questa è a mio parere una funzionalità eccezionale e scalabile. Basta definire l'implementazione/versione/modalità Ruby che stai usando nel tuo Gemfile insieme alle altre dipendenze e Heroku assicurerà che l'ambiente sia pronto.

Problemi correlati