【问题标题】:Vagrant cannot install nokogiri-dependent pluginsVagrant 无法安装依赖 nokogiri 的插件
【发布时间】:2014-04-20 06:10:22
【问题描述】:

我正在尝试为 vagrant (1.5.1) 安装 rackspace 插件:

vagrant plugin install vagrant-rackspace

但它抱怨

Bundler,Vagrant 用来安装插件的底层系统, 报告了一个错误。错误如下所示。这些错误通常是 由错误配置的插件安装或瞬态网络引起 问题。来自 Bundler 的错误是:

安装 nokogiri (1.6.1) 和 Bundler 时出错 无法继续。确保gem install nokogiri -v '1.6.1' 在捆绑之前成功。

但是gem install nokogiri -v '1.6.1'/Applications/Vagrant/embedded/bin/gem install nokogiri -v '1.6.1' 都可以工作。

我查看了一堆 SO 线程和博客文章。我尝试过的事情没有奏效

  1. 正在运行xcode-select --install
  2. 安装完整的 xcode
  3. brew install gcc-4.2
  4. 删除 rvm 和 rvm 版本的 ruby​​
  5. 使用内置 (mac) ruby​​ 和 vagrant-embedded ruby​​ 安装 nokogiri

尽管 nokogiri 在没有 sudo 的情况下都能正常安装(上面的#5),vagrant plugin install vagrant-rackspace 仍然失败...

总之,我可以安装 nokogiri 插件,但是我不能安装 vagrant rackspace 插件,你能帮我安装插件吗?

相关话题

完整输出 vagrant plugin install vagrant-rackspace --debug

【问题讨论】:

  • 尝试从~/.vagrant.d/gems/gems/nokogiri-1.6.1/ 查找安装和构建日志。即使您使用嵌入式 gem,GEM_HOME 等仍然指向您的默认位置,而不是 Vagrant 的内部 gem 存储。
  • 我能找到的唯一日志是/Users/nathannobbe/.vagrant.d/gems/gems/nokogiri-1.6.1/ext/nokogiri/gem_make.out。基本上没用,但这就是它所说的 - /Applications/Vagrant/embedded/bin/ruby extconf.rb /Applications/Vagrant/embedded/bin/ruby: invalid option -H (-h will show valid options) (RuntimeError)
  • 今天早上我试了vagrant plugin install vagrant-aws,和 rackspace 插件一样的问题。
  • 两者都使用依赖 nokogiri 的雾,所以这是意料之中的。 ://

标签: plugins vagrant osx-mavericks


【解决方案1】:

Vagrant 附带嵌入式 Ruby 和独立的 gem 环境。因此,手动将 gems 安装到您的“正常”gem 环境将无济于事。

第一个问题是你不应该使用 sudo 来运行任何 vagrant 命令。如果可能,请删除 ~/.vagrant.d/ 或至少将其递归地返回给您自己的用户。您也可以尝试将 Vagrant 升级到 v1.5.1。

那么请把vagrant plugin install vagrant-rackspace --debug和~/.vagrant.d/gems/gems/nokogiri-1.6.1/ext/nokogiri/mkmf.log的输出gist/pastebin。

【讨论】:

  • 感谢 sudo 的提示。在过去的几天里,我学到了很多关于宝石的知识。
【解决方案2】:

警告:这是一个super-hacky 解决方案,虽然很难这么称呼它。

昨天我在另一个 OSX Mavericks 机器上安装了 Vagrant。就像我在 SO“我所要做的一切” 上阅读的许多其他帖子一样,运行 xcode-select --install 和宾果游戏 vagrant plugin install vagrant-rackspace 就像一个魅力。

今天,当我突然意识到这是一个孤立的 ruby​​ 环境,为什么不核对我的 ~/.vagrant.d 目录并从另一个盒子上的成功构建中复制相同的目录时,我再次陷入了 Bundler 代码的困境......

结果?在我的笔记本电脑上工作的vagrant rackspace!我不确定我是否会弄清楚到底出了什么问题,但如果有人想获得 100 分赏金,我仍然愿意接受建议!

【讨论】:

    【解决方案3】:

    我在 OSX Mavericks,这对我有用:

    设置为环境属性:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 
    

    然后照常安装:

    vagrant plugin install vagrant-rackspace
    

    【讨论】:

    • 这比公认的解决方案要简单得多。
    • 大声笑,我的回答被接受的唯一原因是因为在我发现 something 有效之前没有人回答它......
    • 我还必须将编译器设置为默认编译器:sudo port select gcc none。编译失败,gcc 设置为 gcc 4.8。
    • 仅供参考,这可以通过调用NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-rackspace
    【解决方案4】:

    发布的解决方案对我不起作用。相反,我需要指定我 installed with homebrew (先执行此操作) 的 libxml2、libxslt 和 libiconv。

    我使用以下 [非常简洁] 命令行安装了 gem manually with the embedded ruby

        /Applications/Vagrant/embedded/bin/gem install \ # select the embedded ruby
          --install-dir ~/.vagrant.d/gems \              # install to the vagrant dir
          nokogiri -v '1.6.2.1' -- \                     # pass options to nokogiri install
          --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 \
          --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib \
          --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 \
          --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include \
          --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib
    

    【讨论】:

    • 这是一个痛苦的问题。他们应该只使用系统 Ruby 而不是自己捆绑的衍生产品。
    • 这有自己的一系列问题,@quickshiftin。如果您依赖或要求在系统范围内安装不兼容版本的 gem/库/开发工具,您可以很快进入 Ruby Gem 等效的 DLL Hell。
    • @MarkReed 在 PHP 世界中,我们至少可以设法共享同一个解释器,哈哈。他们没有适当的 gem 依赖管理系统吗?
    【解决方案5】:

    这在 Mavericks 和 Vagrant 1.6.1 上对我有用:

    CC=/usr/bin/gcc vagrant plugin install vagrant-rackspace
    

    我尝试了NOKOGIRI_USE_SYSTEM_LIBRARIES=1,但收到一个错误,提示系统 libxml2 太旧。

    【讨论】:

      【解决方案6】:

      在我的情况下,位于~/vagrant.d/gems/gems 的 nokogiri 文件夹及其文件具有错误的权限(用户/组)。

      将它们更改为 username:staffusername 是您的控制台用户名)后,它就像一个魅力。

      【讨论】:

        【解决方案7】:

        与我的情况类似,我在 OSX Mavericks 10.9.4 和 ruby​​ 2.0.0p247 rbenv 上为 Vagrant 1.6.3 安装 vagrant-omnibus 插件时遇到问题。

        我尝试将 env NOKOGIRI_USE_SYSTEM_LIBRARIES 设置为 1 或 true,然后更新+安装,但仍然存在相同的错误。

        我发现https://github.com/mitchellh/vagrant/issues/3769 中有一个建议使用指定烘焙的 nokogiri 版本,这对我有用。因此,我还为自己写了一个快速的noted 来参考这个不幸的问题。

        【讨论】:

          【解决方案8】:

          如果 Nate Murray 的解决方案不起作用,我发现升级到 Vagrant 版本 > 1.6.4 解决了问题(如本 Github 问题中所述:https://github.com/mitchellh/vagrant/issues/3769

          【讨论】:

            【解决方案9】:

            在我尝试安装 vagrant-parallels 时,由于某种原因,我不得不检查命令行工具文件夹的命名错误。修复允许 nokigiri 正常工作的问题

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-05-15
              相关资源
              最近更新 更多