Sinatra Jruby Heroku - jruby: нет такого файла или каталога - Тринидад (LoadError) - PullRequest
3 голосов
/ 31 января 2012

Я пытаюсь запустить это приложение: github.com/Soliah/sinatra-jruby-heroku.git

В соответствии с примечанием к выпуску Heroku требовалось одно обновление:

http://devcenter.heroku.com/articles/release-note-java-2011-09-29

Сборка идет нормально, без ошибок. Ниже несколько частей бревна:

   [INFO] --- jruby-rake-plugin:1.6.3:jruby (install-bundler) @ jruby-heroku ---
   [INFO] Successfully installed bundler-1.0.21
   [INFO] 1 gem installed
   [INFO] 
   [INFO] --- jruby-rake-plugin:1.6.3:jruby (bundle-install) @ jruby-heroku ---
   [INFO] Fetching source index for http://rubygems.org/
   [INFO] Installing jruby-rack (1.0.10) 
   [INFO] Installing rack (1.3.2) 
   [INFO] Installing tilt (1.3.3) 
   [INFO] Installing sinatra (1.2.6) 
   [INFO] Installing trinidad_jars (1.0.1) 
   [INFO] Installing trinidad (1.2.3) 
   [INFO] Using bundler (1.0.21) 
   [INFO] Your bundle is complete! It was installed into ./vendor/bundle

   (...)

   [INFO] BUILD SUCCESS
   [INFO] ------------------------------------------------------------------------
   [INFO] Total time: 33.408s
   [INFO] Finished at: Tue Jan 31 10:58:03 UTC 2012
   [INFO] Final Memory: 9M/490M
   [INFO] ------------------------------------------------------------------------
  -----> Discovering process types
         Procfile declares types -> jruby, web
  -----> Compiled slug size is 18.6MB
  -----> Launching... done, v5
         http://jrubyandjava.herokuapp.com deployed to Heroku

Но когда я получаю доступ к развернутому приложению. Произошла ошибка приложения.

Вот журнал, с ошибкой:

  $ heroku logs
  2012-01-31T10:57:21+00:00 heroku[slugc]: Slug compilation started
  2012-01-31T10:58:13+00:00 heroku[web.1]: State changed from created to starting
  2012-01-31T10:58:19+00:00 heroku[web.1]: Starting process with command `sh script/jruby -S trinidad -p 52233`
  2012-01-31T10:58:20+00:00 app[web.1]: Classpath is: :/app/etc:/app/target/dependency/jruby-complete.jar
  2012-01-31T10:58:21+00:00 app[web.1]: jruby: No such file or directory -- trinidad (LoadError)
  2012-01-31T10:58:23+00:00 heroku[web.1]: State changed from starting to crashed
  2012-01-31T10:58:23+00:00 heroku[web.1]: State changed from crashed to created
  2012-01-31T10:58:23+00:00 heroku[web.1]: State changed from created to starting
  2012-01-31T10:58:23+00:00 heroku[web.1]: Process exited
  2012-01-31T10:58:28+00:00 heroku[web.1]: Starting process with command `sh script/jruby -S trinidad -p 26224`
  2012-01-31T10:58:28+00:00 app[web.1]: Classpath is: :/app/etc:/app/target/dependency/jruby-complete.jar
  2012-01-31T10:58:31+00:00 app[web.1]: jruby: No such file or directory -- trinidad (LoadError)
  2012-01-31T10:58:32+00:00 heroku[web.1]: State changed from starting to crashed
  2012-01-31T10:58:33+00:00 heroku[web.1]: Process exited
  2012-01-31T10:58:33+00:00 heroku[router]: Error H10 (App crashed) -> GET jrubyandjava.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=

Кажется, JRuby не находит драгоценные камни. Но я перепробовал все виды конфигураций (в скрипте / jruby, конфигурации heroku: add, Procfile и т. Д.), Но никто не работал.

Еще одна вещь: это фактический вывод конфигурации heroku (стек кедр).

  $ heroku config
  DATABASE_URL        => postgres://kfgubrhars:mYBlJ2YKewqG7LwmPqVI@ec2-50-17-200-129.compute-1.amazonaws.com/kfgubrhars
  JAVA_OPTS           => -Xmx384m -Xss512k -XX:+UseCompressedOops
  MAVEN_OPTS          => -Xmx384m -Xss512k -XX:+UseCompressedOops
  PATH                => /usr/local/bin:/usr/bin:/bin
  SHARED_DATABASE_URL => postgres://kfgubrhars:mYBlJ2YKewqG7LwmPqVI@ec2-50-17-200-129.compute-1.amazonaws.com/kfgubrhars

Вот обновленный репозиторий: https://github.com/tomasmuller/sinatra-jruby-heroku

Спасибо заранее!

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Хорошо! Я нашел решение. Вот шаги:

  • Настройте GEM_HOME в сценарии / jruby на:

    GEM_HOME="$APPDIR"/vendor/bundle
    
  • Создан скрипт / комплект, в котором ENV ['GEM_HOME'] и ENV ['GEM_PATH'] указывают на каталог vendor / bundle.

  • Исправлено выполнение jruby-rake-plugin, в pom.xml:

    install-bundler: <args>-S gem install bundler --no-ri --no-rdoc --install-dir vendor/bundle</args>
    
    bundle-install: <args>script/bundle install --without development:test</args>
    
0 голосов
/ 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 обеспечит подготовку среды.


Больше нет необходимости использовать обходной путь или использоватьСборки сторонних производителей с использованием этого метода.Также больше нет необходимости создавать хаки Jemfile.Вместо этого просто делайте все так, как вы обычно делаете с MRI, сохраняйте Gemfile, не используйте сторонние сборки, просто определяйте реализацию / время выполнения Ruby в Gemfile с помощью метода ruby, и Heroku должен позаботиться обо всем.

0 голосов
/ 01 февраля 2012

Произошло недавнее изменение места установки драгоценных камней. Модуль запуска script/jruby ожидает, что драгоценные камни будут в .gems, но похоже, что теперь он изменился на vender/bundle.

Попробуйте вместо этого изменить строку https://github.com/tomasmuller/sinatra-jruby-heroku/blob/master/script/jruby#L94 на export GEM_HOME="$APPDIR"/vender/bundle.

Я намеревался обновить свое сообщение в блоге этими изменениями, но просто не дошел до него.

...