Rails 5.2.0 с консолью Ruby 2.5.1 - "предупреждение:" уже инициализирована константа FileUtils :: VERSION
В настоящее время я испытываю проблему с моим новым приложением rails, а именно:
- Rails 5.2.0
- Ruby 2.5.1p57 (2018-03-29 версия 63029) [x86_64-darwin17]
- rvm 1.29.4 (последнее) Михал Папис, Петр Кучинский, Уэйн Э. Сегин [ 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
- reils новое приложение
- приложение cd
- обновление gem
- обновление пакета
После наблюдения и работы, я обнаружил, что версия fileutils по умолчанию поставляется с Ruby 2.5. * 1.0.2, а команда gem update
устанавливает другую более новую версию 1.1.0. Поэтому при запуске rails c
загружаются две версии fileutils
.
Чтобы решить эту проблему, я добавляю параметр --default
в команду gem update
.
gem update --default
В результате у меня появились две версии по умолчанию, которые можно увидеть, запустив gem list | grep fileutils
gem list | grep fileutils
. Это единственный способ избавиться от предупреждения.
mac: gem list | grep fileutils
fileutils (default: 1.1.0, default: 1.0.2)
Я пишу этот вопрос, вроде, отвечаю только за то, чтобы поделиться с кем-то, кто может испытать ту же проблему. Я потратил несколько часов, чтобы разобраться с этим, так как я не мог найти помощь в Интернете.
Примечание: та же проблема возникает, когда я использую rbenv
вместо rvm
для macOS Sierra.
Пожалуйста, дайте мне знать, если у кого-то есть лучший подход к решению такой проблемы.
Ура,
Ответы
Ответ 1
Я была такая же проблема. Единственный шаг, отсутствующий в вашем посте, - сначала удалить gem fileutils, а затем обновить gem с параметром по умолчанию.
gem uninstall fileutils
Successfully uninstalled fileutils-1.1.0
gem update --default
Updating installed gems
Updating fileutils
Fetching: fileutils-1.1.0.gem (100%)
Successfully installed fileutils-1.1.0
Это избавило меня от многословных сообщений fileutils для меня.
Обновление: Вместо обновления gem --default выполните обновление файла gemutils --default. Этот процесс должен работать и для других драгоценных камней. Спасибо Matijs van Zuijlen за это.