忽略GEM,因为它的扩展未构建

问题描述 投票:90回答:12

在我的工作和家用计算机上,我最近使用ruby-install将Ruby升级到2.3.1。我使用chruby作为我的Ruby切换器。

我开始在终端看到这个警告:

Ignoring bcrypt-3.1.11 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.11
Ignoring bcrypt-3.1.10 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.10
Ignoring binding_of_caller-0.7.2 because its extensions are not built.  Try: gem pristine binding_of_caller --version 0.7.2
Ignoring byebug-9.0.5 because its extensions are not built.  Try: gem pristine byebug --version 9.0.5
Ignoring byebug-5.0.0 because its extensions are not built.  Try: gem pristine byebug --version 5.0.0
Ignoring concurrent-ruby-ext-1.0.2 because its extensions are not built.  Try: gem pristine concurrent-ruby-ext --version 1.0.2
Ignoring debug_inspector-0.0.2 because its extensions are not built.  Try: gem pristine debug_inspector --version 0.0.2

在我的工作,计算机上,列表要长得多,但很容易解决。当我尝试建议的gem pristine GEM,它告诉我它找不到宝石,所以我跑了gem install GEM,这解决了它。

在家里,没有任何工作。

我尝试过的事情,从常识和其他各种Stack问题:

  • gem pristine GEM
  • gem pristine --all
  • 卸载并重新安装gem
  • gem update
  • gem update --system
  • bundle update
  • 卸载并重新安装bundler
  • 卸载并重新安装rails(虽然,这不是Rails特定的问题。)
  • 删除~/.bundle/
  • 打开XCode并让它安装一些扩展(它确实需要这样做,但它没有修复任何东西。)
  • 运行brew doctor并解决所有的小问题,然后brew updatebrew upgrade
  • gem install curb(我无法想象这个宝石与这个问题有什么关系,但是两个不同的人将它列为他们修复同一警告的最后一步。)
ruby rubygems chruby
12个回答
131
投票

我今天遇到了这个问题 - 对于甚至没有安装的宝石都会收到这样的警告!

......好吧,事实证明宝石已经安装了 - 不同于我用chruby设置的红宝石(2.2.3 vs 2.3.1)。

切换到所有不同的红宝石并在所有这些红宝石上运行gem pristine --all解决了这个问题。


0
投票

当您在Mac上进行开发然后构建Docker镜像时,这也是一个问题:https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

当您执行“捆绑安装 - 部署”时,捆绑包将创建一个包含您的宝石的供应商目录。请注意,虽然这包括您在本地文件夹中的宝石,但它只包含您平台的原生扩展。当你在macOS上时,这将是达尔文。您需要在64位x86 linux环境中重复此过程。


0
投票

在这里添加我自己的味道。我使用通过Homebrew安装的rbenv,其中有四个“忽略...扩展未构建”消息。特别:

Ignoring bcrypt-3.1.12 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.12
Ignoring bindex-0.5.0 because its extensions are not built.  Try: gem pristine bindex --version 0.5.0
Ignoring bootsnap-1.3.2 because its extensions are not built.  Try: gem pristine bootsnap --version 1.3.2
Ignoring byebug-10.0.2 because its extensions are not built.  Try: gem pristine byebug --version 10.0.2

我在这个帖子里尝试了很多东西而没有运气。最后在我的情况下,我做了:

  • brew uninstall rbenv
  • rm -rf ~/.rbenv
  • brew install rbenv

在这一点上,我仍然得到错误,但现在我只有一个Ruby版本可以应对:

$ rbenv versions
* system (set by /Users/will/.rbenv/version)

此时我尝试了sudo gem pristine --all但被拒绝了系统Gems目录的权限。

所以我经历并在每个宝石上运行原始,就像

sudo gem pristine bcrypt --version 3.1.12(等)

最后错误消失了。


0
投票

Libby's suggestion刚刚开始一个新的终端会议(她对Sebastian Kim的回答评论)为我工作。比任何其他人都快得多,所以我想让它成为一个答案,因此它更加明显。


15
投票

我遇到了这个问题,并遵循了上述所有相同的命令,甚至可以删除我以前安装的所有Ruby版本。但是,错误仍然存​​在。

事实证明,~/.gem/ruby/中的各种(以前未安装的)版本有一些剩余的宝石。删除我不再使用的文件夹后,错误消失了。


7
投票

我今天也遇到了这个问题而且很沮丧,因为我无法输入,因为我的整个编辑器都闪烁着红色的错误消息。

我不完全确定究竟是什么导致了它,但我相信这是因为我们安装了多个ruby版本或多个ruby版本管理器,它们会相互覆盖,否则会破坏你的宝石路径。

当你有rbenv和rvm时,gem命令也会被覆盖。

通过键入查看您已安装的那些;

which rvm
which rbenv
which chruby

如果安装了其中一个,它将返回一个路径。然后删除它们,确保完全清除所有目录并从干净安装开始。


去掉

这是我为rvm做的事情;

rvm implode
gem uninstall rvm
rm -rf ~/.rvm
rm -rf ~/.rvmrc

这是我为rbenv所做的

首先安装https://github.com/bernsie/rbenv-clean,然后

rbenv clean
sudo apt-get remove rbenv
rm -rf ~/.rbenv

重新安装

然后你有一个干净的主目录来工作。我用How to install Ruby 2.1.4 on Ubuntu 14.04重新安装了rbenv。最后;

rbenv rehash

4
投票

我做了上面提到的一切,包括

  • xcode-select --install
  • 重新安装红宝石
  • 重新安装所有宝石
  • 宝石原始 - 所有

但问题对我来说是一样的。我只是重新启动我的Mac作为最后的希望,警告消息消失了。

很奇怪,但是如果在StackOverflow上尝试了所有内容之后有人在努力解决这个问题,请尝试重新启动计算机。


3
投票

如果您已经安装了RVM,可能是因为您安装了不同的版本而导致错误。

检查并删除无用的版本,但我认为这不是好方法。无论如何错误消失了。

rvm list
rvm use ruby-version
rvm remove ruby-useless-version

刷新cocoapods之后,应该在.rvm GEM_HOME中注入

gem uninstall cocoapods
gem install cocoapods

可能pod COMMAND将抛出关于minitest宝石的错误,所以 - gem install minitest


2
投票

TL;DR - Ruby gems don't like Rubies running from symlinks or moved from where they were built (because of embedded shebangs)

如果调用Ruby目录或环境变量指向符号链接目录,或者复制或重命名,则可能出现此消息。我正在使用chruby和symlinking /opt/rubies/ - > /usr/local/ruby/,但Ruby的动态库查找逻辑不能很好地解决这个问题。

我的解决方案是用/opt/rubies/中的实际红宝石替换符号链接,并在每个Ruby中运行gem pristine --all。对于使用RVM或Rbenv的其他人来说,祝你好运,而无需从头开始。

这可能不是您的确切问题,但希望它有所帮助。


0
投票

卸载并重新安装Vagrant也可以。安装程序.dmg图像中包含一个unistall.tool bash脚本,它将删除Vagrant。

在这里找到了这个解决方案:Updating Vagrant and Gems Extentions Not Built In


0
投票

我有同样的问题,我正在使用rbenv。出于某种原因,我的全局rbenv设置丢失了。为了解决这个问题,我将全局版本设置为我的一个rbenv版本...例如:

rbenv global 2.5.1


0
投票

这是一个老线程,但我自己也遇到过这个问题。

您无需重新启动计算机,只需刷新环境,就可以使用rehash命令执行此操作:

rehash

从手册页:rehash command re-computes the internal hash table of the contents of directories listed in the path environmental variable to account for new commands added.

© www.soinside.com 2019 - 2024. All rights reserved.