在Heroku上使用jRuby cext构建宝石

时间:2012-10-27 02:34:47

标签: heroku jruby buildpack

我正在尝试使用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与原始buildpack之间的唯一区别是我现在已经按如下方式设置了JRUBY_OPTS:

JRUBY_OPTS =“ - 1.9 -Xcext.enabled = true -J-Xmx400m”

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

任何提示?是否有可能(并且会有所帮助)在buildpack中的某处添加.jrubyrc文件?

2 个答案:

答案 0 :(得分:0)

无C扩展安装

在途中只是安装没有C扩展名的json。是可能的,因为C扩展是可选的。注意这比使用C扩展的bson慢,这对你来说可能是一个问题。 source

  

Ruby - 带有可选的C扩展

打开故障单

  

几乎所有gem(即使是具有本机依赖关系的gem)都可以使用Bundler进行安装。如果有一个特定的宝石不能安装在Heroku上,请提交支持票。

因此,您可以打开支持票here

答案 1 :(得分:0)

您应该只配置 JRUBY_OPTS ,而不是设置自定义的构建包:

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

有人说 - 在JRuby中使用C-ext可能是一个坏主意

由于BSON gem(它有native JRuby版本)你肯定不需要C-ext - 编辑你的 Gemfile 和/或重新捆绑(rm Gemfile.lock && bundle) JRuby本地人可能会为你解决这个问题......