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

在我的工作电脑和家用电脑上,我最近使用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(我无法想象这个宝石与此问题有什么关系,但两个不同的人将其列为修复同一警告的最后一步。)
120586 次浏览

TL;DR - Ruby宝石不喜欢红宝石从符号链接中运行或从它们构建的地方移动(因为嵌入式shebangs)

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

在我的案例中,解决方案是用/opt/rubies/中的实际Ruby替换符号链接,并在每个Ruby中运行gem pristine --all。对于其他使用RVM或Rbenv的用户,祝您好运,不必从头开始。

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

我今天遇到了这个确切的问题-得到这样的警告,宝石甚至没有安装!

... 好吧,事实证明gems 已经安装-用于不同的ruby,而不是我用chruby设置为活动的ruby (2.2.3 vs 2.3.1)。

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

我做了上面提到的所有事情,包括

  • xcode-select——安装
  • 重新安装ruby
  • 重新安装所有宝石
  • 宝石原始——全部

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

很奇怪,但如果有人在StackOverflow上尝试了所有东西后还在为这个问题而挣扎,那就重新启动你的机器吧。

我遇到了这个问题,并执行了与上面相同的所有命令,甚至删除了之前安装的所有Ruby版本。然而,错误仍然存在。

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

我今天也遇到了这个问题,它让我很沮丧,因为我无法打字,因为我的整个编辑器闪烁着红色的错误消息。

我不完全确定到底是什么导致了它,但我相信它是因为我们有多个ruby版本或多个ruby版本管理器 安装,它们相互覆盖,否则就会扰乱你通往宝石的路径。

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

通过输入查看您已经安装了哪些;

which rvm
which rbenv
which chruby

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


删除

这是我为数位视讯所做的;

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

下面是我为rbenv所做的

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

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

重新安装

然后就有了一个干净的主目录。我reïnstalled rbenv与如何在Ubuntu 14.04上安装Ruby 2.1.4。最后;

rbenv rehash

卸载和重新安装的流浪者也工作。安装程序.dmg映像中包含unistall.tool bash脚本,它将删除Vagrant。

在这里找到这个解决方案:更新流浪和宝石扩展没有内置

如果您已经安装了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的错误,因此- gem install minitest

利比的建议只是开始一个新的终端会话(她评论塞巴斯蒂安金的回答)为我工作。比其他任何一个都快,所以我想让它成为一个答案,这样它更明显。

我也有同样的问题,我用的是rbenv。由于某种原因,我的全局rbenv设置丢失了。为了解决这个问题,我将全局版本设置为我的rbenv版本之一…例如:

Rbenv global 2.5.1

这是一个老帖子,但我自己也遇到了这个问题。

你不需要重新启动你的机器,你只需要刷新你的环境,你可以用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.

当你在Mac上开发然后构建Docker镜像时,这也是一个问题: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0 < / p >
当你执行“bundle install -deployment”时,bundle将创建一个 供应商目录w/你的宝石在里面。请注意,这包括 您的宝石在本地文件夹,它将只包括本地 为您的平台扩展。如果你用的是macOS,这就是达尔文。 您需要在64位x86 linux上重复这个过程 环境。< / p >

在这里加入我自己的口味。我使用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(等)

最后,错误消失了。

在我的情况下,我试图运行pristine --all,但我得到:

Ignoring ffi-1.11.1 because its extensions are not built.  Try: gem pristine ffi --version 1.11.1
Ignoring jaro_winkler-1.5.3 because its extensions are not built.  Try: gem pristine jaro_winkler --version 1.5.3
Ignoring psych-3.1.0 because its extensions are not built.  Try: gem pristine psych --version 3.1.0
/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': incompatible library version - /.gem/gems/psych-3.1.0/lib/psych.bundle (fatal)

然后,我删除了Users/\{\{user.name}}⁩/⁨.gem⁩上的内容,然后当我需要运行bundle install --force时,它重新安装了所有东西,然后命令pristine --all正常工作

我有这个问题,但只有当我开始tmux会话使用tmuxinator

事实证明,这是因为我使用brew中的tmuxinator,而不是使用gem install安装它。也许同时使用chruby也会导致这个问题。

p/s:我也从~/.gem/ruby中删除了未使用的ruby,但我怀疑这是这个问题为我解决的原因。

运行gem pristine --all一开始没有帮助,但后来我意识到:我正在运行的脚本以这行开始:

#!/usr/bin/ruby

在我的macOS系统(Catalina,但我认为这无关紧要)上,这指向系统自带的Ruby,而不是RVM安装的Ruby。运行gem pristine --all正在修复RVM安装,但我的脚本正在调用不同版本的Ruby。

对我来说,修复是使用env命令来调用当前shell的PATH中指定的Ruby。改变脚本的顶部行,以固定它:

#!/usr/bin/env ruby

运行Mac OS Catalina, brew和rbenv…

今天遇到了这个问题,并且看过了这里所有的答案,我最终发现了这个错误的另一个原因:

Ignoring nokogiri 1.10.7 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.7

当然,宝石原始没有工作。

我的问题是硬编码的GEM_HOME和GEM_PATH环境变量覆盖了rbenv。

因此,检查您没有在~/.zshrc中设置GEM_PATH和GEM_HOME

这个解决方案为我RubyMine IntelliJ工作

我有两个不同的终端正在使用RVMruby<Version>

解决方案:

我必须将其切换到RVM版本,以消除Preferences>Languages&Frameworks>Ruby SDK中的错误

错误:

Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0 rubymine


Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0

enter image description here

如果你像我一样使用rvm,那么修复可以一个简单的:

rvm get stable
rvm reload

正如这个答案https://apple.stackexchange.com/a/192513所述

我在Terminal中执行了这些命令,并为我工作:

  1. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. brew install ruby,它可能需要sudo (sudo brew install ruby)。
  3. echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
  4. source ~/.bash_profile
  5. sudo gem pristine --all

在我的例子中,警告本身已经给出了解决方案,所以我只是一个一个地运行它们。

Ignoring bigdecimal-2.0.0 because its extensions are not built. Try: gem pristine bigdecimal --version 2.0.0
Ignoring date-3.0.1 because its extensions are not built. Try: gem pristine date --version 3.0.1
Ignoring dbm-1.1.0 because its extensions are not built. Try: gem pristine dbm --version 1.1.0
Ignoring etc-1.1.0 because its extensions are not built. Try: gem pristine etc --version 1.1.0

这里有一个例子:

gem pristine bigdecimal --version 2.0.0

因此,运行每一行的命令就解决了我的问题。

这里的大多数评论都是正确的。这个问题经常发生在Ruby版本升级之后。我回顾了宝石命令代码,这里是它的要点。

扩展被编译到gems主目录的gems/宝石/ext子目录中。例如,在我的Cygwin安装上(在Raspbian下也类似),BigDecimal扩展被编译成 /usr/share/gems/gems/bigdecimal-1.3.5 / ext / bigdecimal / bigdecimal.so。< / p > 然而,这是,在执行时引用扩展-这是来自 /usr/lib/gems/ruby/版本/宝石.同样使用BigDecimal,从执行时加载扩展文件 /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5 / bigdecimal.so < / p > 这里是关键:在同一个目录中,有一个空的标记文件 /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5 / gem.build_complete < / p >

宝石命令启动时,它会引用gems/specifications目录来获取已安装gems的列表以及关于它们是否具有扩展的信息。如果一个gem确实有扩展,宝石(在其他健全性检查中)会查找标记文件gem.build_complete。如果没有找到,则会发出错误消息“忽略宝石,因为它的扩展未被构建”。

任何重新构建所有扩展的操作都将修复这个问题。或者,作为总hack,如果你在匆忙和勇敢,你可以尝试复制/usr/lib/gems/ruby/oldver的所有内容到/usr/lib/gems/ruby/newver

cd /usr/lib/gems/ruby
cp -nv 2.3.0/* 2.6

在Ubuntu中,这对我来说很有效。

  1. source ~/.bash_profile
  2. sudo gem pristine --all