Как исправить предупреждающие сообщения Rails с помощью Ruby 2.7.0

Кто-нибудь решил эту проблему с помощью Ruby2.7.0?

я использовал rbenv и установил Ruby v2.7.0, а затем создал проект Rails, используя Rails v6.0.2.1.

В настоящее время, запустив один из

rails s
rails s -u puma
rails s -u webrick

сервер включен, и сайт обслуживается, но в Console log я вижу два предупреждающих сообщения:

local:~/rcode/rb27$ rails s
=> Booting Puma
=> Rails 6.0.2.1 application starting in development 
=> Run `rails server --help` for more startup options
.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here
Puma starting in single mode...
* Version 4.3.1 (ruby 2.7.0-p0), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000 

Итак, предупреждающие сообщения:

**.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call**

**.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here**

4 ответа

Чтобы подавить такие предупреждения, как:

warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

Пока просто префикс / передайте RUBYOPT переменную окружения к вашим командам rails:

RUBYOPT='-W:no-deprecated -W:no-experimental' rails server
или
RUBYOPT='-W:no-deprecated -W:no-experimental' rails db:migrate

Это может не работать с более ранними версиями ruby.

Для обратной совместимости с более ранними версиями ruby ​​префикс RUBYOPT='-W0' вместо.

пример:

RUBYOPT='-W0' bundle exec rspec

Если вы не хотите использовать префикс при каждом запуске команды, просто добавьте его в последнюю строку вашего .zshrc или .bashrc (что бы вы ни использовали):

export RUBYOPT='-W:no-deprecated -W:no-experimental'
или
export RUBYOPT='-W0'

Также см. Последний пункт примечаний здесь:
https://rubyreferences.github.io/rubychanges/2.7.html

Обновился до Rails 6.0.3, исправили предупреждения.

Очевидно, что команде Ruby потребуется некоторое время, чтобы удалить все эти предупреждения в следующей версии Ruby. А пока команда в вашем терминале

`RUBYOPT='-W:no-deprecated' rails s` 

в моем основном, простом новом проекте rails 6.0.2.1 && ruby ​​2.7.0 удалите эти две строки предупреждений выше в вопросе.

Также с командой

RUBYOPT='-W:no-experimental' rails s

вы скроете предупреждения об экспериментальных функциях.

Вы можете объединить эти два в одной команде, например:

RUBYOPT='-W:no-deprecated -W:no-experimental' rails s

Тем не менее, я пробовал эти команды в своем старом проекте, построенном с использованием rails 5.2 и ruby ​​2.6.4, позже обновленных до rails 6.0.1, и они не работали со всеми предупреждениями, которые я получал от разных модулей rails Active* и рубиновых драгоценных камней.

Вероятно, нам понадобится время для обновления кода и гемов для новых последних вещей.

Поскольку это просто предупреждение и ни на что не повлияет, вы можете просто подавить их. Я нашел решение 2, которое мне подходит.

Вариант 1. Запустите сервер rails с RUBYOPT='-W:no-deprecated' rails s

Вариант 2. Установить export RUBYOPT='-W:no-deprecated в вашем профиле bash/zsh

Вариант 3. Установить Warning[:deprecated] = false в вашем рубиновом коде

Другие вопросы по тегам