Как развернуть JRuby Rails 3.1.x на Heroku? - PullRequest
5 голосов
/ 21 ноября 2011

Я хочу иметь возможность развертывать приложение jruby rails 3.1 для 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 Sinatra на Heroku: http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ Чтобы получить этоработать, я использовал не-jruby ruby ​​при запуске 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 justin.gordon@gmail.com
2011-11-21T08:31:17+00:00 heroku[api]: Release v7 created by justin.gordon@gmail.com
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

Ответы [ 3 ]

4 голосов
/ 16 сентября 2012

Начиная с Bundler 1.2, теперь вы можете указать реализацию Ruby и версию в вашем Gemfile. Приятно то, что Heroku поймет эти настройки и подготовит ваше приложение Heroku для вашей среды.

Возьмите Gemfile, например:

source "https://rubygems.org"

ruby "1.9.3"

gem "rails"
gem "puma"

Что здорово, так это то, что по умолчанию Celadon Cedar использует Ruby 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 , поэтому нет необходимости переключаться на сторонний buildpack, чтобы запустить JRuby / JVM на Heroku. Хотя я еще не заставил его работать, этот должен также работать с Рубиниусом , но я считаю, что он в настоящее время прослушивается. Либо так, либо я делаю это неправильно.

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

2 голосов
/ 22 декабря 2011

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

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

Похоже, у вас есть ссылка на ваш локальный репозиторий, а у Heroku of corse ее нет.Я не очень много знаю об упаковке, но может ли эта ссылка появиться здесь?

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

0 голосов
/ 25 августа 2012

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

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

...