JRuby с Синатрой на Heroku - PullRequest
       25

JRuby с Синатрой на Heroku

3 голосов
/ 20 декабря 2011

Я клонирую этот репо:

https://github.com/freeformz/sinatra-jruby-heroku.git

, чтобы попытаться использовать JRuby / Sinatra в стеке Кедра Хероку. Я следую прилагаемым инструкциям, и все отлично работает локально с «началом мастера». Затем я нажимаю на Heroku, и он сначала загружается нормально, но когда я пытаюсь получить доступ к сайту, я получаю сообщение об ошибке в журналах:

jruby: No such file or directory -- trinidad (LoadError)

Так что кажется, что jruby не может найти файл "/app/.gems/bin/trinidad". Сначала я думал, что его там нет, потому что .gems / находится в файле .gitignore, но я уверен, что Heroku создает эту сторону сервера при помощи git push.

$ APPDIR / .gems добавляется в PATH, чтобы Heroku мог видеть сценарий тринидада. Я также пытался изменить Procfile так, чтобы он играл по пути:

web: script/jruby -S bin/trinidad -p $PORT

Но не игра в кости. У кого-нибудь был успех в развертывании чего-либо JRuby к кедру Heroku?

Спасибо

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

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


Теперь, когда все это на месте, Heroku должен создатьbinstubs (через Bundler) в APP_ROOT/bin, что вы можете сделать, например, так:

web: bin/trinidad -p $PORT -e $RACK_ENV --threaded

Просто не используйте bundle exec, так как JRuby плохо с этим справляется.Всегда используйте binstubs, предоставленные Bundler, которые всегда находятся в APP_ROOT/bin на Heroku.

0 голосов
/ 12 марта 2012

Я подозреваю, что ваши драгоценные камни не в /app/.gems, а скорее в /app/vendor/bundle

Вы можете узнать, запустив эту команду:

heroku run ls /app/.gem
heroku run ls /app/vendor/bundle

В любом случае, вам, вероятно, следуетдобавьте GEM_HOME / bin к пути, а не GEM_HOME, как вы заявляете.

У меня есть сообщение в блоге о запуске Jruby и Тринидад на Heroku здесь: http://deployingjruby.blogspot.com/2012/03/deploying-with-trinidad-on-heroku.html

Ипример приложения здесь: https://github.com/jkutner/jruby-trinidad-heroku

Некоторые другие материалы, которые вы можете найти, немного устарели.

0 голосов
/ 24 января 2012

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

http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/

...