2011-11-21 1 views
5

Я хочу, чтобы иметь возможность использовать jruby rails 3.1 приложение для Heroku.Как развернуть JRuby Rails 3.1.x на Heroku

Heroku теперь поддерживает Java: http://blog.heroku.com/archives/2011/08/25/java/ Предположительно, должно быть возможно развернуть приложение JRuby rails. Там в учебнике здесь для простого Java: http://devcenter.heroku.com/articles/java и другие здесь: http://devcenter.heroku.com/articles/spring-mvc-hibernate

Вот учебник для приложения JRuby Синатра на Heroku: http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ Для того, чтобы получить эту работу, мне пришлось использовать не JRuby рубин при запуске Heroku , поскольку heroku падает, если rvm использует jruby.

Для того, чтобы запустить команду

mvn package 

мне пришлось бежать это:

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

Я создал приложение:

heroku create jg1-sinatra --stack cedar 

Я оттолкнул файл на Heroku, но когда приложение запустилось, он разбился. ? :(

Любые советы Я предполагаю, что это не будет задолго до того, Heroku есть учебник по этому

файла журнала из 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

Это говорит о том, что он не может найти библиотеку JRuby. Вы включили его в свой пакет? Пакет работает локально вообще? –

ответ

2

У вас есть эта строка:

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

Швы у вас есть ссылки на репозиторий локали где и Heroku из Корсики не имеют его. я не знаю так много о упаковке, но может быть эта ссылка появится Вот ?

Проверить все исх и посмотреть варианты упаковки может быть хорошим началом ...

+0

@justingordon, ваша попытка на самом деле преуспеть после того, как вы попробовали этот ответ? Было бы хорошо узнать о вашем успехе :) –

+0

heroku теперь поддерживает JRuby напрямую ... – justingordon

0

Предыдущие хаки для получения JRuby и другие неподдерживаемые автономной работы на Heroku устарели при наличии сторонних buildpacks:

https://devcenter.heroku.com/articles/buildpacks https://github.com/jruby/heroku-buildpack-jruby

4

на Bundler 1.2 вы теперь в состоянии specify the Ruby implementation and version в вашем Gemfile. Самое приятное в этом состоит в том, что Heroku поймет эти настройки и подготовит ваше приложение Heroku для вашей среды.

Отнесите Gemfile, например:

source "https://rubygems.org" 

ruby "1.9.3" 

gem "rails" 
gem "puma" 

Что круто о том, что по умолчанию Celadon Cedar использует рубин 1.9.2. Однако, когда вы укажете ruby "1.9.3" в Gemfile, он фактически скомпилирует Ruby 1.9.3 для вашей среды Heroku.

Теперь, если вы хотите добавить другую реализацию на Ruby в среде Heroku, вы можете сделать это так:

source "https://rubygems.org" 

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

gem "rails" 
gem "puma" 

Теперь он будет установить и использовать JRuby 1.7.0.preview1 в Ruby 1.9 режим для вашего приложения Heroku после развертывания. Он также определит правильные параметры JVM в переменных среды Heroku.

Лучше всего то, что это поставляется с официальным Heroku buildpack, поэтому нет необходимости переключаться на сторонний сборщик, чтобы получить JRuby/JVM, идущий на Heroku. Хотя я еще не получил его на работу, это should also work with Rubinius, но я считаю, что он в настоящее время прослушивается. Либо это, либо я делаю это неправильно.

Это, на мой взгляд, удивительная и масштабируемая функция. Просто определите Ruby-реализацию/версию/режим, который вы используете в своем Gemfile, а также ваши другие зависимости, и Heroku обеспечит подготовку среды.