2011-11-21 13 views
5

Quiero ser capaz de deply una aplicación jruby rails 3.1 a Heroku.Cómo implementar JRuby Rails 3.1.x en Heroku

Heroku ahora admite Java: http://blog.heroku.com/archives/2011/08/25/java/ Supuestamente, debería ser posible implementar una aplicación de rieles JRuby. Hay un tutorial aquí para Java claro: http://devcenter.heroku.com/articles/java y otro aquí: http://devcenter.heroku.com/articles/spring-mvc-hibernate

Aquí hay un tutorial para una aplicación JRuby Sinatra en Heroku: http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ Con el fin de conseguir que esto funcione, que tenía uso de rubí no jruby cuando se ejecuta heroku , como heroku se bloquea si rvm usa jruby.

Con el fin de ejecutar el comando

mvn package 

tuve que correr esto:

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

creé la aplicación:

heroku create jg1-sinatra --stack cedar 

Empujé el archivo a heroku, pero cuando la aplicación comenzó, se bloqueó. ? :(

Cualquier consejo que supongo que no pasará mucho tiempo antes de Heroku tiene un tutorial sobre este

archivo de registro de 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

Eso dice que no puede encontrar la biblioteca JRuby. ¿Lo has incluido en tu paquete? ¿El paquete se ejecuta localmente? –

Respuesta

2

Tiene esta línea:

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

costuras que tienen referencia a su repositorio local en algún lugar y Heroku de corse no lo tiene. no sé mucho acerca de los envases, pero puede haber esta referencia aparece aquí ?

Comprobar todos ref y ver el envasado de las opciones podría ser un buen comienzo ...

+0

@justingordon, ¿tu intento realmente tuvo éxito después de probar esta respuesta? Sería bueno saber de tu progreso :) –

+0

heroku ahora es compatible con JRuby directamente ... – justingordon

4

a partir de Bündler 1.2 que ahora son capaces de specify the Ruby implementation and version en su Gemfile. Lo bueno de esto es que Heroku entenderá estos ajustes y preparará su aplicación Heroku para su entorno.

Tome este Gemfile por ejemplo:

source "https://rubygems.org" 

ruby "1.9.3" 

gem "rails" 
gem "puma" 

Lo bueno de esto es que por defecto Celadon Cedar utiliza Rubí 1.9.2. Sin embargo, cuando especifique ruby "1.9.3" en el Gemfile, en realidad compilará Ruby 1.9.3 para su entorno Heroku.

Ahora, si desea agregar una implementación de Ruby diferente a su entorno de Heroku, puede hacerlo de esta manera:

source "https://rubygems.org" 

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

gem "rails" 
gem "puma" 

Ahora que va a instalar y usar JRuby 1.7.0.preview1 en Ruby 1.9 modo para su aplicación Heroku en la implementación. También definirá las opciones de JVM adecuadas en las variables de entorno de Heroku.

Lo mejor de todo es que esto viene con el Heroku buildpack oficial, por lo que no hay necesidad de cambiar a un paquete de construcción de terceros para que el JRuby/JVM funcione en Heroku. Aunque todavía no lo he hecho funcionar, este should also work with Rubinius, pero creo que está actualmente con errores. O eso, o lo estoy haciendo mal.

Esto es en mi opinión una característica increíble y escalable. Simplemente defina la implementación/versión/modo de Ruby que está utilizando en su Gemfile junto con sus otras dependencias y Heroku se asegurará de que el entorno esté preparado.