【问题标题】:JRuby with Sinatra on HerokuHeroku 上的 JRuby 和 Sinatra
【发布时间】:2011-12-20 11:27:22
【问题描述】:

我正在克隆这个 repo:

https://github.com/freeformz/sinatra-jruby-heroku.git

尝试在 Heroku 的 Cedar 堆栈上使用 JRuby/Sinatra。我按照随附的说明进行操作,一切都在“工头开始”的情况下在本地运行良好。然后我 git push 到 Heroku,它最初加载正常,但是当我尝试访问该站点时,我在日志中收到错误:

jruby: No such file or directory -- trinidad (LoadError)

所以 jruby 似乎找不到“/app/.gems/bin/trinidad”文件。我最初认为它不存在,因为 .gems/ 在 .gitignore 文件中,但我很确定 Heroku 在 git push 上创建了该服务器端。

$APPDIR/.gems 被添加到 PATH 中,因此 Heroku 应该能够看到 trinidad 脚本。我还尝试更改 Procfile 以使用以下路径:

web: script/jruby -S bin/trinidad -p $PORT

但没有骰子。有没有人成功地将任何 JRuby 部署到 Heroku cedar?

谢谢

【问题讨论】:

    标签: ruby heroku sinatra jruby


    【解决方案1】:

    从 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。但是,当您在 Gemfile 中指定 ruby "1.9.3" 时,它实际上会为您的 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,因此无需切换到第 3 方构建包即可让 JRuby/JVM 在 Heroku 上运行。虽然我还没有让它工作,这个should also work with Rubinius,但我相信它目前有问题。要么这样,要么我做错了。

    在我看来,这是一个很棒且可扩展的功能。只需定义您在 Gemfile 中使用的 Ruby 实现/版本/模式以及其他依赖项,Heroku 就会确保环境已准备好。


    现在,有了这一切,Heroku 应该在 APP_ROOT/bin 中创建 binstubs(通过 Bundler),所以您可以这样做:

    web: bin/trinidad -p $PORT -e $RACK_ENV --threaded
    

    不要使用bundle exec,因为JRuby 不能很好地处理它。始终使用 Bundler 提供的 binstub,它们始终位于 Heroku 上的 APP_ROOT/bin

    【讨论】:

      【解决方案2】:

      我相信有关在此博客条目中包含 gem 的详细信息可能对您有所帮助:

      http://chris.chowie.net/2011/08/28/Sinatra-with-JRuby-on-Heroku/

      【讨论】:

        【解决方案3】:

        我怀疑你的宝石不在/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

        您可能会发现其他一些材料有些过时了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-14
          • 2011-09-24
          • 1970-01-01
          • 2011-10-28
          • 1970-01-01
          • 2011-08-20
          • 2016-11-25
          • 1970-01-01
          相关资源
          最近更新 更多