osx 10.9上的bundle install失败

时间:2014-05-10 17:24:32

标签: ruby macos gem rubygems

我在OSX Marvericks上用rvm。 从bundler安装像nokogiri这样的原生扩展失败了。 但是从gem命令安装工作。

我还安装了最新的XCode,命令行工具。

我不知道bundle install和gem install之间有什么区别。

$ rvm requirements
Checking requirements for osx.
Certificates in '/usr/local/etc/openssl/cert.pem' already are up to date.
Requirements installation successful.
Yusuke-no-MacBook-Air-2:doorkeeper-jp-admin yandod$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Using rake 10.3.1
Using bundler 1.6.2
Using mini_portile 0.5.3

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/yandod/.rvm/rubies/ruby-2.0.0-p451-rvm/bin/ruby extconf.rb 
/Users/yandod/.rvm/rubies/ruby-2.0.0-p451-rvm/bin/ruby: invalid option -H  (-h will show valid options) (RuntimeError)

extconf failed, exit code 1

Gem files will remain installed in /Volumes/Macintosh HD 2/develop/doorkeeper-jp-admin/vendor/bundle/gems/nokogiri-1.6.1 for inspection.
Results logged to /Volumes/Macintosh HD 2/develop/doorkeeper-jp-admin/vendor/bundle/extensions/x86_64-darwin-13/2.0.0/nokogiri-1.6.1/gem_make.out
An error occurred while installing nokogiri (1.6.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.1'` succeeds before bundling. 

宝石安装的结果。

$ gem install nokogiri -v '1.6.1'
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.6.1
1 gem installed

相关软件的版本:

$ bundle --version
Bundler version 1.6.2
$ rvm --version

rvm 1.25.25 (stable) by Wayne E. Seguin , Michal Papis  [https://rvm.io/]
$ gem --version
2.2.2

加入: 我的捆绑包配置

$ cat ~/.bundle/config 
BUNDLE_PATH: ./vendor/bundle
BUNDLE_BUILD__NOKOGIRI: --use-system-libraries --with-iconv-dir=/usr/local/opt/libiconv  --with-xml2-config=/usr/local/opt/libxml2/bin/xml2-config --with-xslt-config=/usr/local/opt/libxslt/bin/xslt-config

3 个答案:

答案 0 :(得分:0)

尝试: rvm get stable

然后: rvm reload

答案 1 :(得分:0)

执行gem install时,宝石会安装到宝石的默认系统位置(您可以查看gem env的输出。)

但是当你正在进行bundle install时,你将gem安装到系统的gem存储库以外的位置(因为你已经为你的包BUNDLE_PATH=./vendor/bundle配置了一个自定义路径),所以Bundler会即使它们存在于系统的gem存储库中,也要安装gem,因为你没有使用它。

现在,由于某种原因,gem命令可以轻松找到构建gem的原生扩展所需的系统库,但是Bundler有。所以你要做的就是向Bundler指明这些库的路径。

所以,假设你使用的是Homebrew:

  • 确保安装了所有本机依赖项:
    brew install libxml2 libxslt libiconv

  • 指示Bundler如何构建nokogiri gem:
    bundle config build.nokogiri --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

  • 安装捆绑包,发信号通知nokogiri使用上述库: NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install

应该是它。

修改

虽然上述步骤可能仍然有必要,但实际问题似乎是项目路径中存在“空格”字符。

看到取消设置捆绑路径选项会让事情变得有效,我已经仔细检查了您的原始bundle install输出,并且我已经意识到您正在使用带有'space'的外部驱动器名字上的字符。

包含“空格”或特殊字符的项目路径通常是许多工具的问题,因此您应该避免使用它们。请尝试重命名音量或将项目移动到其他位置。

抱歉,我以前没有意识到。

答案 2 :(得分:0)

您应该将这些目录的所有权更改为您的用户。

sudo chown -R $(whoami) /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig

并确保您的用户必须具有写权限。

chmod u+w /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig