在我的工作和家用计算机上,我最近使用 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,所以我运行 gem install GEM
,然后解决了它。
在家里,没有任何工作。
我尝试过的事情,来自常识和其他各种堆栈问题:
宝石原始 GEM
宝石原始--全部
卸载并重新安装 gem
宝石更新
宝石更新--系统
捆绑更新
卸载并重新安装捆绑程序
卸载和重新安装 rails (虽然,这不是 Rails 特定的问题。)
删除 ~/.bundle/
打开 XCode 并让它安装一些扩展(它确实需要这样做,但它没有解决任何问题。)
运行 brew doctor 并解决所有小问题,然后 brew update 和 brew upgrade
宝石安装路边(我无法想象这个宝石与这个问题有什么关系,但是两个不同的人将它列为他们修复同一警告的最后一步。)
bcrypt
,但它仍然给了我两个警告。
gem pristine --all
不起作用。通过删除包括捆绑器在内的所有宝石来解决。然后安装了 bundler gem install bundler
,最后导航回我的项目并运行 bundle install
,它重新安装了我所有的 gem,一切正常
我今天遇到了这个确切的问题 - 甚至没有安装的 gem 收到这样的警告!
...好吧,事实证明,gem 已安装 - 与我使用 chruby(2.2.3 与 2.3.1)设置的激活的 ruby 不同。
切换到所有不同的红宝石并在所有红宝石上运行 gem pristine --all
解决了这个问题。
我遇到了这个问题,并按照上面所有相同的命令进行操作,甚至删除了我以前安装的所有 Ruby 版本。但是,错误仍然存在。
事实证明,~/.gem/ruby/
中的各种(以前卸载的)版本有一些剩余的 gem。删除我不再使用的文件夹后,错误消失了。
ruby-install
切换到 asdf
后,这也为我解决了问题 & chruby
sudo rm -rf ~/.gem/ruby/
~/.gem/ruby/
下的 cache
文件夹解决了该问题。
我今天也遇到了这个问题,它很沮丧,因为我无法输入,因为我的整个编辑器都因错误消息而闪烁红色。
我不完全确定究竟是什么原因造成的,但我相信这是因为我们安装了多个 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/meowsus/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
我做了上面提到的一切,包括
xcode-选择--安装
重新安装红宝石
重新安装所有宝石
宝石原始--全部
但问题对我来说是一样的。我只是重新启动了我的 Mac 作为最后的希望,警告消息消失了。
很奇怪,但是如果有人在尝试 StackOverflow 上的所有内容后遇到此问题,请尝试重新启动您的机器。
在这里添加我自己的味道。我使用通过 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卸载rbenv
rm -rf ~/.rbenv
冲泡安装rbenv
此时我仍然遇到错误,但现在我只有一个 Ruby 版本需要处理:
$ rbenv versions
* system (set by /Users/will/.rbenv/version)
此时我尝试了 sudo gem pristine --all
,但因系统 Gems 目录的权限而被拒绝。
所以我检查并在每个宝石上运行原始,比如
sudo gem pristine bcrypt --version 3.1.12
(等)
最后错误消失了。
运行 gem pristine --all
起初没有帮助,但后来我意识到:我正在运行的脚本以以下行开头:
#!/usr/bin/ruby
在我的 macOS 系统(Catalina,但我认为这并不重要)上,这指向系统附带的 Ruby,而不是 RVM 安装的那个。运行 gem pristine --all
正在修复 RVM 安装,但我的脚本调用了不同版本的 Ruby。
我的解决方法是使用 env
命令调用在当前 shell 的 PATH
中指定的任何 Ruby。将脚本的第一行更改为此修复它:
#!/usr/bin/env ruby
bundle install
为通过 RVM Ruby 切换器选择的 ruby 安装了 gem(及其本机扩展),其中引用系统 Ruby 的脚本找不到它们。您的解决方案是使 Ruby 脚本和 gem 与用户安装的 rubies (see) 一起工作的标准做法。
apt purge tmuxinator
然后 gem install tmuxinator
使它工作。每当我升级我的非项目 ruby 版本时,我可能都必须安装它,但我更喜欢这个。谢谢!
就我而言,警告本身已经提出了解决方案,所以我只是一一运行它们。
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
所以运行每一行的命令已经解决了我的问题。
如果您安装了 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
TL;DR - Ruby gems 不喜欢从符号链接运行或从构建位置移动的红宝石(因为嵌入的 shebangs)
如果调用 Ruby 目录或环境变量指向符号链接的目录,或者被复制或重命名,则可能会出现此消息。我正在使用 chruby 并且正在符号链接 /opt/rubies/
-> /usr/local/ruby/
,但是 Ruby 的动态库查找逻辑不能很好地处理这个问题。
我的解决方案是用 /opt/rubies/
中的实际 rubies 替换符号链接,并在每个 Ruby 中运行 gem pristine --all
。对于使用 RVM 或 Rbenv 的其他人,祝你好运,无需从头开始。
这可能不是您的确切问题,但希望它有所帮助。
gem pristine --all
。感谢您复活这个死问题。我差点把它烧掉然后重新开始。
运行 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 pristine 没有用。
我的问题是硬编码的 GEM_HOME 和 GEM_PATH 环境变量覆盖了 rbenv。
因此,请检查您是否没有在 ~/.zshrc 中设置 GEM_PATH 和 GEM_HOME
这里的大多数评论都在正确的轨道上。这个问题经常出现在 Ruby 版本升级之后。我查看了 gem 命令代码,这里是它的要点。
扩展被编译到 gems 主目录的 gems/gem/ext 子目录中。例如,在我的 Cygwin 安装中(在 Raspbian 下也类似),BigDecimal 扩展被编译成 /usr/share/gems/gems/bigdecimal-1.3.5/ext/bigdecimal/bigdecimal.so。
但是,这不是在执行时引用扩展的地方——即来自 /usr/lib/gems/ruby/ver/gem。再次使用 BigDecimal,执行时从 /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5/bigdecimal.so 加载扩展文件
这是关键:在同一目录中,有一个空标记文件 /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5/gem.build_complete
当 gem 命令启动时,它会引用 gems/specifications 目录来获取已安装 gem 的列表以及关于它们是否有扩展的信息。如果 gem 确实有扩展名,gem(在其他健全性检查中)会查找标记文件 gem.build_complete。如果没有找到,它会发出错误消息“忽略 gem,因为它的扩展没有构建”。
任何重建所有扩展的操作都可以解决这个问题。或者,作为彻底的黑客,如果你匆忙勇敢,你可以尝试将 /usr/lib/gems/ruby/oldver 的所有内容复制到 /usr/lib/gems/ruby/newver 例如
cd /usr/lib/gems/ruby
cp -nv 2.3.0/* 2.6
这是一个旧线程,但我自己也遇到了这个问题。
你不需要重启你的机器,你只需要刷新你的环境,你可以使用 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.
rehash
或 hash -r
是 *nix 上可用的 shell 命令。当 C shell 启动时,它会为其路径中的所有命令构建一个哈希表:每个命令名及其绝对路径名。所以,在你启动一个csh运行后,如果沿路径的目录中添加了新的程序,你需要使用shell的rehash命令来重建它的hash表。 (参见:docstore.mik.ua/orelly/unix3/upt/ch27_06.htm)
rbenv
,我也遇到了这个问题,但我忘记使用 rbenv rehash
,所以内部仍然指向系统 Ruby(macos)而不是新安装的系统......阅读太多了;-)
当您在 Mac 上开发然后构建 Docker 映像时,这也是一个问题:https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0
当您执行“bundle install --deployment”时,bundler 将创建一个供应商目录,其中包含您的 gem。请注意,虽然这包括本地文件夹中的 gem,但它只会包括您平台的本机扩展。当您在 macOS 上时,这将是 Darwin。您需要在 64 位 x86 linux 环境中重复该过程。
我遇到了这个问题,但只是在我使用 tmuxinator
开始 tmux
会话时。
原来是因为我使用的是 brew
中的 tmuxinator
而不是使用 gem install
安装它。也许同时使用 chruby
也会导致问题。
p/s:我还从 ~/.gem/ruby
中删除了未使用的 ruby,但我怀疑这就是为我解决此问题的原因。
卸载和重新安装 Vagrant 也可以。安装程序 .dmg 映像中包含一个 unistall.tool
bash 脚本,它将删除 Vagrant。
在此处找到此解决方案:Updating Vagrant and Gems Extentions Not Built In
我有同样的问题,我正在使用 rbenv。由于某种原因,我的全局 rbenv 设置丢失了。为了解决这个问题,我将全局版本设置为我的 rbenv 版本之一......例如:
rbenv 全球 2.5.1
在我的情况下,我试图运行 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
按预期工作
该解决方案适用于 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
https://i.stack.imgur.com/BhlH4.png
我已经在终端中执行了这些命令并为我工作:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install ruby,可能需要sudo(sudo brew install ruby)。 echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile source ~/.bash_profile sudo gem pristine --all
在 Ubuntu 中,这对我有用。
源 ~/.bash_profile sudo gem pristine --all
gem pristine --all
没有用。有关详细信息,请参阅“不同之处”中的 this answer。gem pristine --all
有权限问题,您应该检查which ruby
。brew link --overwrite ruby && source ~/.bash_profile
并运行gem pristine --all
可能会有所帮助