我在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
答案 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