我正在尝试在 Debian Wheezy 上安装 Gitorious。gitorious 使用捆绑器进行自动安装。
当我运行“捆绑安装”时(不仅在安装 gitorious 时,还安装 redmine 例如)我有时会收到如下错误:
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
~/.rvm/rubies/ruby-2.1.0/bin/ruby extconf.rb
creating Makefile
make "DESTDIR=" clean
make "DESTDIR="
compiling houdini_js_e.c
compiling houdini_xml_e.c
compiling houdini_html_u.c
compiling houdini_html_e.c
compiling houdini_uri_u.c
compiling escape_utils.c
escape_utils.c: In function ‘rb_eu_escape_html_as_html_safe’:
escape_utils.c:126:2: error: assignment of read-only member ‘klass’
make: *** [escape_utils.o] Error 1
make failed, exit code 2
Gem files will remain installed in ~/.rvm/gems/ruby-2.1.0/gems/escape_utils-0.3.2 for inspection.
Results logged to ~/.rvm/gems/ruby-2.1.0/extensions/x86_64-linux/2.1.0/escape_utils-0.3.2/gem_make.out
An error occurred while installing escape_utils (0.3.2), and Bundler cannot continue.
Make sure that `gem install escape_utils -v '0.3.2'` succeeds before bundling.
在这个特定示例中,我能够通过更改给定目录中的源来修复构建错误。(我从 github 复制了最新的源代码,它解决了问题https://github.com/brianmario/escape_utils/issues/42)。
然后我成功执行了“make && make install && ~/.rvm/rubies/ruby-2.1.0/bin/ruby extconf.rb”。
修复 gem 后如何继续我的“捆绑安装”?当我重新执行“捆绑安装”时,gem 只是重新获取并重新编译,当然会出现相同的错误,完全放弃我的更改。
到目前为止我尝试了什么:
- 使用“bundle package”生成缓存并执行“bundle install --local”
- 将编译好的 gem 复制到 gitorious 目录。
- 在固定源上执行“gem install”。
在此类错误之后继续“捆绑安装”的正确方法是什么?
注意:对于更具体的答案,您应该发布错误消息。你刚才提到
没有指定错误是什么以及您如何临时修复它。
检查错误日志。gem 扩展编译可能会因为一些不兼容而失败。
如果 gem 已经安装在您的环境中,则 bundler 不会尝试重新安装它。但是我看到您使用 RMV,因此如果您更改 gemset 或 Ruby 版本,问题将再次发生。
你能做的最好的想法是检查错误。如果您认为错误是错误,请提交报告并提供您修复它所遵循的步骤。
如果错误取决于您的环境,那么您需要修复它,否则问题将再次出现,正如我所解释的那样。