带有 Ruby 2.5.1 控制台的 Rails 5.2.0 - `warning:` `already` 已初始化常量 FileUtils::VERSION

Posted

技术标签:

【中文标题】带有 Ruby 2.5.1 控制台的 Rails 5.2.0 - `warning:` `already` 已初始化常量 FileUtils::VERSION【英文标题】:Rails 5.2.0 with Ruby 2.5.1 console - `warning:` `already` initialized constant FileUtils::VERSION 【发布时间】:2018-12-22 09:39:01 【问题描述】:

我目前在使用新的 Rails 应用程序时遇到问题,具体来说:

Rails 5.2.0 Ruby 2.5.1p57(2018-03-29 修订版 63029)[x86_64-darwin17] rvm 1.29.4(最新),作者:Michal Papis、Piotr Kuczynski、Wayne E. Seguin [https://rvm.io]

当我运行 rails c 时,它会生成一个指向 fileutils gem 的警告链接,如下所示:

`/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:90:` `warning:` `already` initialized constant FileUtils::VERSION
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:92: warning: previous definition of VERSION was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant FileUtils::Entry_::S_IF_DOOR
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1267: warning: previous definition of S_IF_DOOR was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1446: warning: already initialized constant FileUtils::Entry_::DIRECTORY_TERM
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1541: warning: previous definition of DIRECTORY_TERM was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1448: warning: already initialized constant FileUtils::Entry_::SYSCASE
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1543: warning: previous definition of SYSCASE was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1501: warning: already initialized constant FileUtils::OPT_TABLE
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1596: warning: previous definition of OPT_TABLE was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1555: warning: already initialized constant FileUtils::LOW_METHODS
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1650: warning: previous definition of LOW_METHODS was here
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/fileutils.rb:1562: warning: already initialized constant FileUtils::METHODS
/usr/local/lib/ruby/gems/2.5.0/gems/fileutils-1.1.0/lib/fileutils.rb:1657: warning: previous definition of METHODS was here

我遵循本指南http://railsapps.github.io/installrubyonrails-mac.html 中概述的所有步骤。

您可以按照指南或以下步骤复制问题:

    rvm install ruby​​-2.5.1 rails 新应用 cd 应用程序 宝石更新 捆绑更新

在观察和解决之后,我发现 Ruby 2.5.* 附带的 fileutils 的默认版本是 1.0.2,而gem update 命令安装了另一个更新的版本 1.1.0。因此,当我运行rails c 时,会加载两个版本的fileutils

为了解决这个问题,我将--default 选项附加到gem update 命令。

gem update --default

结果,我得到了两个默认版本,可以通过运行gem list | grep fileutils 来查看。这是我摆脱警告的唯一方法。

mac: gem list | grep fileutils
fileutils (default: 1.1.0, default: 1.0.2)

我写这个问题,有点,回答只是为了与可能遇到同样问题的人分享。我花了几个小时来整理它,因为我在互联网上找不到任何帮助。

注意:当我在 macOS Sierra 上使用 rbenv 而不是 rvm 时,也会出现同样的问题。

如果有人有更好的方法来处理此类问题,请告诉我。

干杯,

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。您的帖子中缺少的一步是先卸载 fileutils gem,然后使用默认选项进行 gem 更新。

gem uninstall fileutils
Successfully uninstalled fileutils-1.1.0
gem update fileutils --default
Updating installed gems
Updating fileutils
Fetching: fileutils-1.1.0.gem (100%)
Successfully installed fileutils-1.1.0

这让我摆脱了冗长的 fileutils 消息。

更新: 代替 gem update --default,执行 gem update fileutils --default。这个过程也适用于其他宝石。感谢 Matijs van Zuijlen。

【讨论】:

我也这样做了。谢谢! 成功了!想解释一下原因吗? 一个疯狂的猜测是在您的本地计算机中设置了多个 gem 路径。您可以通过 gem env 进行检查。 fileutil 可能会同时从多个来源加载,并且可以在重置后进行排序? 再想一想:有时我会得到` gem "fileutils" cannot be uninstalled because it is a default gem`。发生这种情况时我该如何处理? 运行 gem update --default 并不是一个好主意,因为它将所有更新的 gem 变成默认 gem。相反,请执行gem update fileutils --default【参考方案2】:

它对我有用:

bundle clean --force

捆绑清洁(1) 清理 Bundler 目录中未使用的 gems

【讨论】:

谢谢!给我最好的答案!

以上是关于带有 Ruby 2.5.1 控制台的 Rails 5.2.0 - `warning:` `already` 已初始化常量 FileUtils::VERSION的主要内容,如果未能解决你的问题,请参考以下文章

带有 jquery datepicker 的 Ruby on rails

如何根据从下拉列表中选择的 CATEGORY 来控制 NEW/EDIT 视图中的列标题。带有 MYSQL 的 Ruby on Rails

如何快速正确的安装 Ruby,Rails 运行环境 · Ruby China

如何快速正确的安装 Ruby,Rails 运行环境

如何快速正确的安装 Ruby,Rails 运行环境 · Ruby China

在OS X系统如何正确安装Ruby,Rails运行环境