我正在克隆这个回购:
https://github.com/freeformz/sinatra-jruby-heroku.git
尝试在Heroku的Cedar堆栈上使用JRuby / Sinatra。我遵循所包含的说明,一切都在本地运行,并带有“工头开始”。我然后git推送到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雪松?
由于
答案 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将确保环境准备就绪。
现在,完成所有这些后,Heroku应该在APP_ROOT/bin
中创建binstub(通过Bundler),所以你可以做的就是这样:
web: bin/trinidad -p $PORT -e $RACK_ENV --threaded
只是不要使用bundle exec
因为JRuby不能很好地使用它。始终使用Bundler提供的binstubs,它总是位于Heroku上的APP_ROOT/bin
。
答案 1 :(得分:0)
我相信在此博客条目中包含宝石的详细信息可能对您有所帮助:
http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/
答案 2 :(得分:0)
我怀疑你的宝石不在/app/.gems
而在/app/vendor/bundle
您可以通过运行此命令找到:
heroku run ls /app/.gem
heroku run ls /app/vendor/bundle
无论哪种方式,您都应该将GEM_HOME / bin添加到路径中,而不是在您声明时添加GEM_HOME。
我有一篇关于在Heroku上运行Jruby和Trinidad的博文: http://deployingjruby.blogspot.com/2012/03/deploying-with-trinidad-on-heroku.html
这里有一个示例应用: https://github.com/jkutner/jruby-trinidad-heroku
您可能会发现其他一些材料有点过时了。