安装“nio4r”时的rails 5.0.0:无法构建gem本机扩展
Posted
技术标签:
【中文标题】安装“nio4r”时的rails 5.0.0:无法构建gem本机扩展【英文标题】:rails 5.0.0 when installing "nio4r" : Failed to build gem native extension 【发布时间】:2016-11-23 15:35:05 【问题描述】:这里是日志:http://pastebin.com/CAgur9xd
Installing nio4r 1.2.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
C:/RailsInstaller/Ruby2.2.0/bin/ruby.exe -r ./siteconf20160720-8272-c88sgk.rb extconf.rb --with-cflags=-std=c99
checking for unistd.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=$opt-dir/include
--with-opt-lib
--without-opt-lib=$opt-dir/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/RailsInstaller/Ruby2.2.0/bin/$(RUBY_BASE_NAME)
C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:587:in `try_cpp'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:1060:in `block in have_header'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:911:in `block in checking_for'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:351:in `block (2 levels) in postpone'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:321:in `open'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:351:in `block in postpone'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:321:in `open'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:347:in `postpone'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:910:in `checking_for'
from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/mkmf.rb:1059:in `have_header'
from extconf.rb:3:in `<main>'
extconf failed, exit code 1
安装包时返回(从日志中的第 117 行开始):
Installing nio4r 1.2.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
因此无法安装捆绑包。它在最后返回:
An error occurred while installing nio4r (1.2.1), and Bundler cannot continue.
Make sure that `gem install nio4r -v '1.2.1'` succeeds before bundling.
注意:我已经尝试过其他问题的解决方案,但还是一样。 如果可以手动安装“nio4r”,请告诉我如何。
【问题讨论】:
gem install nio4r -v '1.2.1' run and/它会解决你的错误 它返回这个:pastebin.com/czfiV0Gb 提问时,请始终将错误完整日志直接包含在问题中。请不要链接到外部粘贴站点,因为那里的日志往往会很快消失,从而使问题在未来变得不那么有用。 【参考方案1】:这可能是相关的:GCC compilation error when installing Nokogiri
我发现了一个错误。我的系统上安装了 2 个 gcc 版本,我只运行
brew unlink gcc
就解决了问题。
这也是我的情况。 benw unlink gcc
工作
【讨论】:
【参考方案2】:如果您使用 Windows 并使用版本高于或等于 2.4 的 RubyInstaller 安装 ruby,则不应从 RubyInstaller 网站安装 DevKit,而只能使用在 Ruby 和 RubyInstaller 之后安装的“msys64”(确保您键入数字 3安装 msys 和 mingw)。从 PATH 环境变量中删除 devkit 目录及其路径,因此当 rubygems 尝试安装 nio4r 并调用 C 编译器时,它将调用 msys 编译器。 阅读此处https://rubyinstaller.org/2017/05/25/rubyinstaller-2.4.1-1-released.html 了解有关 RubyInstaller 中的 MSYS2 和 DevKit 的更多信息
【讨论】:
【参考方案3】:在 Ubuntu 16.04 上遇到了同样的问题。 我做了什么来解决这个问题:
删除 Gemfile.lock : sudo rm Gemfile.lock 已安装 Ruby-Dev:
sudo apt-add-repository ppa:brightbox/ruby-ng sudo apt-get 更新 sudo apt-get install ruby2.4-dev
还有重要的一步:重启!
【讨论】:
【参考方案4】:Fedora 64 位解决方案
sudo dnf install redhat-rpm-config
【讨论】:
【参考方案5】:我遇到了类似的问题,运行此命令解决了我的问题。
bundle config build.nio4r --with-cflags="-std=c99"
现在您可以成功运行bundle install
。
【讨论】:
【参考方案6】:我的儿子为我解决了这个问题。问题是我先安装了 Ruby,然后是 Rails 安装程序。所以我不得不卸载 Ruby 并仅使用 Rails 安装程序重新安装。
【讨论】:
大声笑尝试了 2 个小时的各种事情,这就是解决方案。 ? 干得好那个男孩!【参考方案7】:我在设置导轨时也遇到了这个问题。 (寻找 php 的替代品)。
我意识到我已经用 x64 Devkit 安装了 x86 ruby,所以我首先下载了我安装的 x64 ruby,然后卸载了 x86 版本。我确保我的路径变量设置正确。 然后我使用此页面上的说明安装了 devkit http://rubyonwindowsguides.github.io/book/ch02-04.html 最后我安装了rails,这次它运行良好,没有错误希望对你有帮助
【讨论】:
我是用另一种方式做的..!用 x32 devkit 安装了 x64 ruby,只有当我试图去查看他们目录中的 gem 进行检查时才意识到这一点,,,并节省了我的一天:)【参考方案8】:我在尝试将我的 Rails 升级到 V5.0.0 时遇到了同样的问题,我按照此说明进行操作,并且效果很好。在此处阅读“安装 Ruby DevKit”部分 >> http://jekyll-windows.juthilo.com/1-ruby-and-devkit/
【讨论】:
我的朋友,我非常感谢你,之前有人告诉过我 DevKit,但没有说明,所以我无法将它弯曲成 ruby。当然还有其他问题,但现在都解决了。再次感谢您 如果您遇到问题,请降级到 Ruby 2.2.5。就我而言,Rails 5.0.0 不能很好地与 Ruby 2.3.1 配合使用。 @MelvinCh'ng 我也遇到了 Rails 5 + Ruby 2.3.1 和一些 gem(nio4r、pg、puma、websocker-driver)的问题。这是一个已知问题吗? @JonathanSoifer 如果您在 Windows 上遇到此问题,建议您将 Ruby 降级到 2.2.3。许多人在 Windows 上运行 Ruby 2.3.1 时遇到问题。最新版本的 Ruby 在 Mac 上运行良好。 @MelvinCh'ng Mac :)【参考方案9】:引用您的日志输出:
编译器未能生成可执行文件。 (运行时错误) 您必须先安装开发工具。
在 Windows 上,您需要 install the DevKit 才能编译 gems。
【讨论】:
我安装了它并运行了设置并标记了设置中的所有内容,但是当它完成并再次尝试时,它给了我相同的结果。我在安装 DefKit 时做错了吗? 我应该安装某个版本的 DefKit 吗?我已经安装了 2.2.5 版【参考方案10】:删除 Gemfile.lock 并运行 bundle install 命令
【讨论】:
这是非常不推荐的。它可能最终会更新您不想更新的 gem。 将 gem nio4r 从 v2.0.0 更新到 v2.1.0 解决了我的问题。 扩展@gizotti 的评论,Gemfile.lock 是存储gem 依赖树和项目使用的每个gem 的精确版本的文件。如果Gemfile
是食谱,Gemfile.lock
是您根据食谱烘焙的蛋糕。如果您删除它,Bundler 将根据您的 Gemfile 重建一个新的,这意味着您最终可能会在项目的树中使用不同版本的任何 gem。对于严肃的项目,这意味着大量的测试和验证,而不是你想要“只是做”的事情。无论如何,您可以通过运行bundle update
来实现基本相同的目标。
@BenHull 这个评论是我读过的关于锁文件的最棒的文字以上是关于安装“nio4r”时的rails 5.0.0:无法构建gem本机扩展的主要内容,如果未能解决你的问题,请参考以下文章