我希望能够向Heroku倾斜一个jruby rails 3.1 app。
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
以下是Heroku上JRuby Sinatra应用程序的教程:http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/ 为了使这个工作,我在运行heroku时使用了非犹太红宝石,因为如果rvm使用jruby,heroku会崩溃。
为了运行命令
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
答案 0 :(得分:4)
从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将确保环境准备就绪。
答案 1 :(得分:2)
你有这一行:
Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar
您可以在某处找到您的语言环境存储库,而Cooku的Heroku没有它。 我不太喜欢打包,但这个参考可能会出现在这里吗?
检查所有参考并查看包装选项可能是一个良好的开端......
答案 2 :(得分:0)
以前在Heroku上获取JRuby和其他不支持的运行时的黑客现在已经过时,第三方构建包的可用性已经过时了:
https://devcenter.heroku.com/articles/buildpacks https://github.com/jruby/heroku-buildpack-jruby