【问题标题】:Replacing RVM with rbenv --mkmf error用 rbenv --mkmf 错误替换 RVM
【发布时间】:2012-09-03 13:23:08
【问题描述】:

我正在考虑用 rbenv 替换 RVM,因为我正在使用 bundle 来管理我的 gemfile。我相信 rbenv 在管理我的 Ruby 版本方面要轻松得多,所以我卸载了 RVM 并安装了 rbenv。我使用

安装了捆绑器 gem
gem install bundler

因为我们到处都需要它。然后我打开了一个项目并使用 rbenv 安装了所需版本的 Ruby:

rbenv install 1.9.3-p194
rbenv local 1.9.3-p194
rbenv rehash

我输入 ruby -v 以确保它使用的是正确版本的 Ruby,并且确实如此,所以我尝试运行 bundle,它一直运行,直到它尝试安装 RedCloth,然后失败:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby1.9.1 extconf.rb --with-cflags=-w
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from extconf.rb:1:in `<main>'

它建议我在捆绑之前安装RedCoth,所以我安装了RedCloth:

gem install RedCloth

成功了。然后我运行ruby -v,只是为了确保它仍然是正确的,然后尝试运行bundle update,并且发生了同样的错误:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby1.9.1 extconf.rb --with-cflags=-w
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from extconf.rb:1:in `<main>'

    Gem files will remain installed in /home/ruberto/.bundler/tmp/7551/gems/RedCloth-4.2.9 for inspection.
    Results logged to /home/ruberto/.bundler/tmp/7551/gems/RedCloth-4.2.9/ext/redcloth_scan/gem_make.out
    An error occurred while installing RedCloth (4.2.9), and Bundler cannot continue.
    Make sure that `gem install RedCloth -v '4.2.9'` succeeds before bundling.

然后我尝试安装不同版本的 Ruby,但也没有成功。

有人有想法吗?

我随后尝试在我的其他项目中做同样的事情,一切似乎都很好。我有一个使用 1.8.7 的,它就像将 rbenv 设置为正确的版本然后运行 ​​bundle 一样简单。我尝试了几乎所有 Ruby 版本的组合,但都无法正常工作。

【问题讨论】:

    标签: ruby-on-rails rbenv


    【解决方案1】:

    我遇到了类似的问题。事实证明,即使我的路径前面有 ~/.rbenv/shims 目录,zsh 还是将 bundle 的位置缓存到 /usr/local/bin/bundle。

    解决方案只是在 shell 上运行 rehash(而不是 rbenv rehash)。这刷新了所有缓存的命令,包括 bundle,之后一切顺利。

    【讨论】:

      【解决方案2】:

      我终于克服了这个问题。

      我安装了错误版本的 Ruby 1.8.7-p370。然后我运行 bundle 并且当 bundle 用于 1.9.3 包时,它有一些 gems 编译针对 Ruby 1.8.7 的本机扩展,所以即使我要切换到 1.9.3 版本并尝试再次运行 bundle 它也会炸毁。

      为了解决这个问题,我只是删除了所有的 gem,然后安装了正确版本的 Ruby,然后重新运行了 bundle。

      【讨论】:

      • 而不是删除并重新安装您可以使用的 gem,gem pristine --all 通常会在更新 Ruby 版本时修复编译问题。但是,rbenv 的工作方式应该为每个安装的 Ruby 版本安装单独的 gem,这应该在安装 Ruby 后由bundle install 修复。
      猜你喜欢
      • 2018-03-02
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2014-11-04
      • 1970-01-01
      • 2012-03-12
      • 2016-06-18
      相关资源
      最近更新 更多