带有 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