我正在尝试运行此应用程序:github.com/Soliah/sinatra-jruby-heroku.git
根据Heroku的发行说明,有必要进行一次更新:
http://devcenter.heroku.com/articles/release-note-java-2011-09-29
构建顺利,没有任何错误。 Bellow一些日志部分:
[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没有找到宝石。 但是我尝试了各种配置(在script / jruby中,heroku配置:add,Procfile等)并没有人工作。
还有一件事:这是实际的heroku配置输出(stack cedar)。
$ 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
提前感谢!
答案 0 :(得分:1)
确定!我找到了解决方案。以下是步骤:
将脚本/ jruby中的GEM_HOME调整为:
GEM_HOME="$APPDIR"/vendor/bundle
创建脚本/包,ENV ['GEM_HOME']和ENV ['GEM_PATH']指向'vendor / bundle'目录。
在pom.xml中调整了jruby-rake-plugin的执行情况:
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>
答案 1 :(得分:0)
最近宝石的安装位置发生了变化。启动器script/jruby
希望宝石位于.gems
,但看起来现在已更改为vender/bundle
。
请尝试将行https://github.com/tomasmuller/sinatra-jruby-heroku/blob/master/script/jruby#L94更改为export GEM_HOME="$APPDIR"/vender/bundle
。
我一直想用这些更改来更新我的博客文章但是还没有解决它。
答案 2 :(得分:0)
从Bundler 1.2开始,您现在可以在Gemfile
中specify the Ruby implementation and version了。关于这一点的好处是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
时,它实际上会为您的Heroku环境编译Ruby 1.9.3。
现在,如果您想为Heroku环境添加不同的Ruby实现,可以这样做:
source "https://rubygems.org"
ruby "1.9.3", :engine => "jruby", :engine_version => "1.7.0.preview1"
gem "rails"
gem "puma"
现在,它将在部署时为您的Heroku应用程序在Ruby 1.9模式下安装和使用JRuby 1.7.0.preview1。它甚至还会在Heroku环境变量中定义正确的JVM选项。
最重要的是,这是官方的Heroku buildpack,所以没有必要切换到第三方buildpack来让Herub上的JRuby / JVM运行。虽然我还没有开始工作,但是should also work with Rubinius,但我相信它目前已被窃听。不管怎样,或者我做错了。
在我看来,这是一个非常棒且可扩展的功能。只需定义您在Gemfile中使用的Ruby实现/版本/模式以及其他依赖项,Heroku将确保环境准备就绪。
不再需要使用变通方法或使用此方法使用第三方构建包。也不再需要创建一个hacky Jemfile
。相反,只需像通常使用MRI那样做所有事情,保留Gemfile,不要使用第三方构建包,只需通过ruby
方法在Gemfile中定义Ruby实现/运行时,Heroku应该处理事情