5

我正在尝试使用 JRuby Heroku buildpack (https://github.com/jruby/heroku-buildpack-jruby) 来运行一个简单的测试应用程序。

但是,似乎无法编译具有 C 扩展名的 gem。例如,在执行“git push heroku”时,没有C扩展的gem安装成功,但是...

   Using activerecord (3.1.3) 
   Using activeresource (3.1.3) 
   Using bouncy-castle-java (1.5.0146.1) 
   Using bson (1.7.0) 
   Installing bson_ext (1.7.0) with native extensions 
   Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

           /tmp/build_10vcxrs9ayvxf/jruby/bin/jruby extconf.rb 
   NotImplementedError: C extension support is not enabled. Pass -Xcext.enabled=true to JRuby or set JRUBY_OPTS or modify .jrubyrc to enable.

      (root) at /tmp/build_10vcxrs9ayvxf/jruby/lib/ruby/shared/mkmf.rb:8
     require at org/jruby/RubyKernel.java:1019
      (root) at /tmp/build_10vcxrs9ayvxf/jruby/lib/ruby/shared/rubygems/custom_require.rb:1
      (root) at extconf.rb:1


   Gem files will remain installed in /tmp/build_10vcxrs9ayvxf/vendor/bundle/jruby/1.9/gems/bson_ext-1.7.0 for inspection.
   Results logged to /tmp/build_10vcxrs9ayvxf/vendor/bundle/jruby/1.9/gems/bson_ext-1.7.0/ext/cbson/gem_make.out
   An error occurred while installing bson_ext (1.7.0), and Bundler cannot continue.
   Make sure that `gem install bson_ext -v '1.7.0'` succeeds before bundling.
   Dependencies installed

看到上面给出的建议后,我创建了 JRuby buildpack 的修改版本,可以在这里找到:https ://github.com/grahamdaley/heroku-buildpack-jruby-cext

这个 buildpack 和原来的唯一区别是我现在设置了 JRUBY_OPTS 如下:

JRUBY_OPTS="--1.9 -Xcext.enabled=true -J-Xmx400m"

但是,这似乎根本没有任何区别,我仍然遇到同样的错误。

有什么提示吗?是否有可能(并且会有所帮助)在 buildpack 的某处添加一个 .jrubyrc 文件?

4

2 回答 2

1

您应该简单地配置JRUBY_OPTS而不是设置自定义的 build-pack :

heroku config:add JRUBY_OPTS="--1.9 -Xcext.enabled=true -J-Xmx400m"

话虽如此 - 将 C-ext 与 JRuby 一起使用可能是个坏主意

由于 BSON gem(它具有本地 JRuby版本),您绝对不需要 C-ext - 使用 JRuby 在本地编辑您的Gemfile和/或重新捆绑(rm Gemfile.lock && bundle)可能会为您解决这个问题......

于 2014-01-26T11:52:42.963 回答
0

无C扩展安装

途中只需安装没有 C 扩展名的 json。是可能的,因为 C 扩展是可选的。注意,这比带有 C 扩展名的 bson 慢,这对您来说可能是个问题。资源

Ruby — 带有可选的 C 扩展

开票

几乎所有的 gem——即使是那些有本地依赖的——都可以使用 Bundler 安装。如果有特定的 gem 无法安装在 Heroku 上,请提交支持票。

所以你可以在这里开一张支持票

于 2013-05-14T10:18:15.637 回答