在我的工作和家用计算机上,我最近使用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 update
gem update --system
bundle update
bundler
rails
(虽然,这不是Rails特定的问题。)~/.bundle/
XCode
并让它安装一些扩展程序(确实需要这样做,但它没有修复任何内容。)brew doctor
并解决所有小问题,然后brew update
和brew upgrade
gem install curb
(我无法想象这个宝石与此问题有什么关系,但有两个人将其列为修复同一警告的最后一步。)答案 0 :(得分:123)
我今天遇到了这个问题 - 对于甚至没有安装的宝石都会收到这样的警告!
......好吧,事实证明 安装了宝石 - 用于与我用chruby设置的红宝石不同的红宝石(2.2.3 vs 2.3.1)。
切换到所有不同的红宝石并在所有红宝石上运行gem pristine --all
解决了这个问题。
答案 1 :(得分:13)
我遇到了这个问题并遵循了上述所有相同的命令,甚至还删除了我以前安装的所有Ruby版本。但是,错误仍然存在。
事实证明,~/.gem/ruby/
中的各种(以前未安装的)版本有一些剩余的宝石。删除我不再使用的文件夹后,错误消失了。
答案 2 :(得分:6)
我今天也遇到了这个问题而且很沮丧,因为我无法输入,因为我的整个编辑器都闪烁着红色的错误消息。
我不完全确定究竟是什么导致了它,但我认为它是因为我们有多个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
答案 3 :(得分:4)
我做了上面提到的所有事情,包括
但问题对我来说是一样的。 我刚刚重新启动我的Mac作为最后的希望,警告信息消失了。
很奇怪,但如果有人在尝试StackOverflow上的所有内容后遇到此问题,请尝试重新启动计算机。
答案 4 :(得分:2)
如果调用Ruby目录或环境变量指向符号链接目录,或者复制或重命名,则可能出现此消息。我正在使用chruby并且是符号链接/opt/rubies/
- &gt; /usr/local/ruby/
,但Ruby的动态库查找逻辑并不能很好地发挥作用。
我的解决方案是用/opt/rubies/
中的实际红宝石替换符号链接,并在每个Ruby中运行gem pristine --all
。对于使用RVM或Rbenv的其他人来说,祝你好运,而无需从头开始。
这可能不是您的确切问题,但希望它有所帮助。
答案 5 :(得分:2)
如果已安装RVM,则可能是由于安装了不同版本而捕获了该错误。
检查并删除无用的版本, 但是我认为这是不好的方法。 反正错误消失了。
rvm list
rvm use ruby-version
rvm remove ruby-useless-version
刷新椰子后,应将其注入.rvm GEM_HOME
gem uninstall cocoapods
gem install cocoapods
可能pod COMMAND
会引发关于minitest
gem的错误,因此– gem install minitest
答案 6 :(得分:2)
这里的大多数评论都在正确的轨道上。这个问题经常发生在 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/更新 例如
cd /usr/lib/gems/ruby
cp -nv 2.3.0/* 2.6
答案 7 :(得分:2)
就我而言,警告本身已经提出了解决方案,所以我只是一一运行它们。
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
所以运行每一行的命令解决了我的问题。
答案 8 :(得分:2)
开始运行gem pristine --all
并没有帮助,但是后来我意识到:我正在运行的脚本从以下一行开始:
#!/usr/bin/ruby
在我的macOS系统(Catalina,但我不认为这很重要)上,这指向系统随附的Ruby,而不是RVM安装的Ruby。运行gem pristine --all
可以修复RVM的安装问题,但是我的脚本正在调用其他版本的Ruby。
对我来说,解决方法是使用env
命令调用当前shell的PATH
中指定的任何Ruby。将脚本的第一行更改为此可以解决:
#!/usr/bin/env ruby
答案 9 :(得分: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
答案 10 :(得分:1)
我遇到了这个问题,但是仅当我使用tmux
开始tmuxinator
会话时。
原来是因为我正在使用tmuxinator
中的brew
,而不是使用gem install
安装它。也许同时使用chruby
也会导致此问题。
p / s:我还从~/.gem/ruby
中删除了未使用的红宝石,但我怀疑这就是为我解决此问题的原因。
答案 11 :(得分:0)
在 Ubuntu 中,这对我有用。
source ~/.bash_profile
sudo gem pristine --all
答案 12 :(得分:0)
我已经在Terminal中执行了以下命令并为我工作:
/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
答案 13 :(得分:0)
答案 14 :(得分: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
答案 15 :(得分:0)
只需输入此命令
sudo gem pristine --all
对我有用吗
答案 16 :(得分: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
按预期工作了
答案 17 :(得分: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
(等)
最后错误消失了。
答案 18 :(得分:0)
在Mac上进行开发,然后构建Docker映像时,这也是一个问题: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0
当您执行“捆绑安装--deployment”时,捆绑器将创建一个 供应商目录,其中包含您的宝石。请注意,尽管这包括 您在本地文件夹中的宝石,它将仅包含本地宝石 您平台的扩展。当您在macOS上时,它将是Darwin。 您需要在64位x86 linux上重复该过程 环境。
答案 19 :(得分: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.
答案 20 :(得分:0)
我遇到了同样的问题,并且正在使用rbenv。由于某种原因,我的全局rbenv设置丢失了。为了解决此问题,我将全局版本设置为我的rbenv版本之一...例如:
rbenv全局2.5.1
答案 21 :(得分:0)
Libby建议刚开始一个新的终端会话(她对Sebastian Kim的回答进行了评论)对我有用。速度也比其他任何一个都要快,所以我想让它成为一个答案,这样它就更加可见。
答案 22 :(得分:0)
卸载并重新安装Vagrant也可以。安装程序.dmg图像中包含一个<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
...
<init-param>
<param-name>mappedfile</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>
bash脚本,它将删除Vagrant。
在此处找到此解决方案:Arbitrary queries on n:m relationship, including “all” and “any”