我正在尝试在 Debian Wheezy 上安装 Gitorious。gitorious 使用 bundler 进行自动安装。
当我运行“bundle install”时(不仅在安装 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)。
然后我执行“制作&&制作安装&&~/.rvm/rubies/ruby-2.1.0/bin/ruby extconf.rb”成功地。
修复 gem 后,如何继续“bundle install”?当我重新执行“bundle install”时,gem 只是重新获取并重新编译,当然会出现相同的错误,完全丢弃我的更改。
我到目前为止尝试过的:
- 使用“bundle package”生成缓存并执行“bundle install --local”
- 将编译好的 gem 复制到 gitorious 目录。
- 在固定源上执行“gem install”。
出现此类错误后,继续“捆绑安装”的正确方法是什么?
答案1
注意:要获得更具体的答案,您应该发布错误消息。你刚才提到
在这个特定的例子中,我能够通过改变给定目录中的源来修复构建错误。
没有具体说明错误是什么以及如何临时修复它。
检查错误日志,gem扩展编译可能因为某些不兼容而失败。
如果您的环境中已经安装了该 gem,则 bundler 将不会尝试重新安装它。但是我看到您使用了 RMV,因此如果您更改 gemset 或 Ruby 版本,问题将再次发生。
您能做的最好的事情就是检查错误。如果您认为错误是一个 bug,请提交报告并提供修复该错误所遵循的步骤。
如果错误取决于您的环境,那么您需要修复它,否则问题将再次出现,正如我所解释的那样。