忽略GEM,因为未构建扩展名


133

在工作和家用计算机上,我最近都使用来将Ruby升级到2.3.1 ruby-install。我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 (我无法想象这个宝石与这个问题有什么关系,但是两个不同的人将其列为解决同一警告的最后一步。)

1
如果没有安装宝石,我什至会看到相同的警告。我卸载了bcrypt它,但仍然给了我两个警告。
菲利普·朗曼

1
您更新了捆绑软件吗?卸载和重新安装将只使用Gemfile.lock中的任何内容。Bundler是将构建扩展程序的人。同样,您的输出列出了多个宝石版本,因此您应该知道这对于该版本的红宝石来说是系统范围的(这意味着您将要重建多个宝石)。
安东尼

我在主文件夹中,而不是Rails项目中,所以没有Gemfile。
菲利普·朗曼

我也遇到了同样的问题(使用rvm)。gem pristine --all不工作。通过删除所有宝石(包括捆绑器)来解决。然后安装捆绑器gem install bundler,最后导航回我的项目并运行bundle install,重新安装了我所有的宝石,一切正常
David Watson

就我而言,这是由vim扩展引起的。我做了别名vim =“ rvm use system do vim”来解决它。但是我仅在退出vim时才看到警告,因此,如果您在其他情况下看到此警告,则可能不适用。
Brian Deterling

Answers:


179

我今天碰到了这个确切的问题-甚至还没有安装宝石时就收到类似的警告!

...好吧,事实证明,这些宝石安装的-与我在chruby上设置的红宝石不同(2.2.3与2.3.1)。

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


3
这对我来说仅在当前红宝石上执行此操作(我使用rvm)。也许这会阻止某人进行过多的清理工作;)
Sandro L

1
有时候gem pristine --all会没有好处。有关更多信息,请参见“询问不同”中的答案
GDP2

如果gem pristine --all存在权限问题,则应检查which rubybrew link --overwrite ruby && source ~/.bash_profile和跑步gem pristine --all可能会有所帮助
克里斯·严

这些解决方案都不适用于我,并且我也遇到同样的问题。
亚历克斯·科恩

19

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

原来,中的各种(以前已卸载)版本都有一些剩余的宝石~/.gem/ruby/。删除不再使用的文件夹后,错误消失了。


2
这为我做到了。rm -rf。以前,我曾尝试过将所有gems原始安装,但无济于事。
StevenNunez

10

我今天也遇到了这个问题,它很沮丧,因为我无法键入,因为我的整个编辑器都闪烁红色并显示错误消息。

我不完全确定是什么原因造成的,但是我相信这是因为我们安装了多个ruby版本或多个ruby版本管理 ,它们相互覆盖,否则会弄乱通往宝石的路径。

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

输入以下内容查看已安装的软件;

which rvm
which rbenv
which chruby

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


去掉

这是我为rvm做的;

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

重新安装

然后,您将获得一个干净的主目录。我重新介绍了如何在Ubuntu 14.04上安装Ruby 2.1.4的 rbenv 。最后

rbenv rehash

只需删除与rvm相关的内容,即可在macOS上为我解决此问题
neu242

6

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

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

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

很奇怪,但是如果在尝试了StackOverflow上的所有功能后仍在尝试解决此问题,请尝试重新启动计算机。


4
感谢您分享重启提示。在Mac上,我遇到了同样的问题,并且仅通过启动新的终端会话就能够解决。
利比

3

如果已安装RVM,则可能是由于安装了不同版本而捕获了该错误。

检查并删除无用的版本,但是我认为这不是一个好方法。反正错误消失了。

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

刷新椰子后,应将其注入.rvm GEM_HOME中

gem uninstall cocoapods
gem install cocoapods

可能pod COMMAND会抛出有关minitestgem 的错误,所以–gem install minitest


2

TL; DR-Ruby宝石不喜欢从符号链接运行或从其构建位置移动的红宝石(因为嵌入了shebangs)

如果调用Ruby目录或环境vars指向符号链接目录,或者将其复制或重命名,则可能出现此消息。我正在使用chruby并进行符号链接/opt/rubies/->/usr/local/ruby/,但是Ruby的动态库查找逻辑在此方面不能很好地发挥作用。

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

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


1
事实证明,这是gem pristine --all所有这些方面的运行。感谢您复活这个死的问题。我几乎要把它全部烧掉并重新开始。
菲利普·朗曼

2

在这里添加我自己的风味。我使用rbenv通过Homebrew安装的程序,并收到其中四个“忽略...扩展未建立”消息。特别:

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 (等等)

最后,错误消失了。


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.


1
您在说什么操作系统?
rbanffy

rehash或者hash -rbash是* nix上可用的shell命令。当C shell启动时,它将为路径中的所有命令构建一个哈希表:每个命令名及其绝对路径名。因此,在启动csh运行之后,如果将新程序添加到路径上的目录中,则需要使用shell的rehash命令来重建其哈希表。(cf:docstore.mik.ua/orelly/unix3/upt/ch27_06.htm
yacc

1

我遇到了这个问题,但仅在tmux使用进行会话时才出现tmuxinator

原来是因为我正在使用tmuxinatorfrom brew而不是使用进行安装gem install。也许同时使用chruby也会导致该问题。

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


1

gem pristine --all起初运行并没有帮助,但后来我意识到:我正在运行的脚本从以下行开始:

#!/usr/bin/ruby

在我的macOS系统上(Catalina,但我认为这并不重要),这指向系统随附的Ruby,而不是RVM安装的Ruby。运行gem pristine --all正在修复RVM安装,但是我的脚本正在调用其他版本的Ruby。

对我来说,解决方法是使用env命令调用当前shell的指定的Ruby PATH。将脚本的第一行更改为此可以解决:

#!/usr/bin/env ruby


只是发生在我身上-谢谢!这意味着bundle install为通过RVM Ruby切换器选择的红宝石安装了gems(及其本机扩展名),在该脚本中引用Ruby的系统找不到脚本。您的解决方案是使Ruby脚本和gem与用户安装的rubies一起使用的标准做法(请参阅参考资料)。
tanius

这使我走上了正轨!就我而言,我希望tmuxinator成为一个util(而不是特定项目的捆绑dep),因此我将其安装在Ubuntu上。这样apt purge tmuxinator,然后gem install tmuxinator使其工作。每当我升级非项目红宝石版本时,我可能都必须用gem安装它,但我会更好。谢谢!
迷宫

1

运行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



0

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

rbenv全局2.5.1


0

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

当您执行“捆绑安装--deployment”时,捆绑器将在其中创建带有您的gem的供应商目录。请注意,尽管这包括本地文件夹中的gems,但仅包括平台的本机扩展。当您使用macOS时,它将是Darwin。您需要在64位x86 linux环境上重复该过程。


0

Libby的建议只是开始一个新的终端会话(她对Sebastian Kim的回答进行了评论)对我有用。它也比其他任何一个都要快得多,所以我想让它成为一个答案,让它更明显。


0

就我而言,我试图跑步,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按预期工作


0

这个解决方案对我来说适用于RubyMine IntelliJ工作

我使用了两个不同的终端,RVM并且ruby<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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.