我希望能够向Heroku提供jruby rails 3.1应用程序。
JRuby现在支持Java:http://blog.heroku.com/archives/2011/08/25/java/,应该可以部署Heroku 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时使用了非JRuby ruby,因为如果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发布于 2011-12-22 19:01:07
你有这行代码:
Classpath is: :/app/etc:/.m2/repository/org/jruby/jruby-complete/1.6.3/jruby-complete-1.6.3.jar假设你在某个地方引用了你的locale代码库,而corse的Heroku却没有。我不太了解包装,但是这里可能会出现这个参考资料吗?
检查所有的参考,看看包装选项可能是一个好的开始…
发布于 2012-09-16 20:00:53
从Bundler1.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。但是,当您在Gemfile中指定Ruby1.9.3时,它实际上会为您的Heroku环境编译Ruby1.9.3。
现在,如果你想在你的Heroku环境中添加一个不同的Ruby实现,你可以这样做:
source "https://rubygems.org"
ruby "1.9.3", :engine => "jruby", :engine_version => "1.7.0.preview1"
gem "rails"
gem "puma"现在,它将在部署时以Ruby1.9模式为您的JRuby应用程序安装和使用Heroku1.7.0.preview1。它甚至还会在Heroku环境变量中定义适当的JVM选项。
最棒的是,它附带了官方的Heroku buildpack,所以没有必要切换到第三方构建包来让JRuby/JVM在Heroku上运行。虽然我还没有让它工作,这个should also work with Rubinius,但我相信它目前是错误的。要么这样,要么我做错了。
在我看来,这是一个很棒的、可伸缩的特性。只需定义您在Gemfile中使用的Ruby实现/版本/模式以及其他依赖项,Heroku将确保环境准备就绪。
发布于 2012-08-25 07:53:05
以前在Heroku上获取JRuby和其他不受支持的运行时的黑客攻击现在已经过时了,因为有了第三方构建包:
https://devcenter.heroku.com/articles/buildpacks https://github.com/jruby/heroku-buildpack-jruby
https://stackoverflow.com/questions/8209299
复制相似问题