Кто-нибудь решил эту проблему с Ruby 2.7.0
?
Я использовал rbenv
и установил Ruby v2.7.0, а затем создал проект Rails, используя Rails v6.0.2.1
.
В настоящее время, запустив один из
rails s
rails s -u puma
rails s -u webrick
сервер работает и сайт обслуживается, но в Console
журнале я вижу два предупреждающих сообщения:
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**
Ответы:
Для подавления таких предупреждений, как:
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#warning-and-
источник
Очевидно, что команде ruby потребуется некоторое время, чтобы удалить все это предупреждение в следующей версии ruby. А пока команда в вашем терминале
на моем простом, новом проекте rails 6.0.2.1 && ruby 2.7.0 удалите эти две строки предупреждений выше в вопросе.
Также с помощью команды
Вы будете скрывать предупреждения об экспериментальных особенностях.
Вы можете объединить эти два в одну команду как:
Тем не менее, я попробовал эти команды в моем старом проекте, построенном с rails 5.2 и ruby 2.6.4, позже обновленным до rails 6.0.1, и они не сработали хорошо для всех предупреждений, которые я получил от различных модулей rails Active * и гемов ruby.
Вероятно, нам понадобится некоторое время для обновления кода и гемов для новых последних вещей.
источник
Так как это всего лишь предупреждение, оно ни на что не повлияет. Вы можете просто подавить их. Я нашел решение 2, которое подходит мне.
Вариант 1. Запустите сервер rails с
RUBYOPT='-W:no-deprecated' rails s
Вариант 2. Установите
export RUBYOPT='-W:no-deprecated
в своем профиле bash / zshВариант 3. Установите
Warning[:deprecated] = false
в своем рубиновом кодеисточник