Як виправити попереджувальні повідомлення Rails за допомогою Ruby 2.7.0


43

Хтось вирішив це питання 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**

8
Позиційні аргументи та аргументи ключових слів слід розділити в Ruby 3.0. Це просте попередження. Рейки заповнені цією схемою. ruby-lang.org/uk/news/2019/12/12/…
Джош Броді

3
@JoshBrody дуже дякую Я побачив це посилання, і є кілька пропозицій щодо переключення попереджень на зразок "Якщо ви хочете відключити попередження про депрекацію, будь ласка, використовуйте аргумент командного рядка -W: no-застаріле або додайте Warning [: deprected] = false у свій код. " але я думав над трохи кращим рішенням / виправленням для actionpack v6.0.2.1
Nezir

Приховувати попередження про депресію за всіма порадами - це ідея BAD, особливо коли ви хочете згладити майбутні оновлення.
Влад

1
@ Добре погодився, але зменшити шум журналу тимчасово нормально (якщо ти знаєш, що ти робиш)
Халил Гарбауї

Відповіді:


54

Для придушення попереджень, таких як:

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.

Для зворотної сумісності з більш ранніми версіями рубінового префікса 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-


1
Одне питання з цим полягає в тому, що встановлені попередні версії Ruby, де прапор -W: no-deprecized 'недійсний, призведе до помилки. Я виправив це за допомогою експорту RUBYOPT = '- W0'
Augusto Samamé Barrientos

Чи існує спосіб виклику завдання, який не дає попередження, тобто називати його таким, що не застаріло?
барлоп

@barlop добре, це не завдання, яке дає попередження. Попередження надходять із основного коду. В основному, пошук застарілих, якщо вони є у вашому власному коді, і виправлення їх буде зроблено. І якщо вони не входять до вашого коду, тоді відкрийте питання або потягніть запити на репост коштовних каменів, які ви включаєте, і попросіть їх виправити. або просто зачекайте, коли вони це виправлять. Тут згадуються деякі припинення: ruby-lang.org/en/news/2019/12/25/ruby-2-7-0- звільнено тут: rubyreferences.github.io/rubychanges/2.7.html
Халил Гарбауї

@KhalilGharbaoui Дякую Я щойно зробив. Свіжий інсаль з рубіну та рейок iirc pastebin.com/SYjypsrP виглядає так, що у мене є останній з усіх, і все, що я робив, було створено порожній проект, спробував допомогу з рейками і отримав попередження також за допомогою рейки db: migrate. Я думаю, я повинен продовжувати ці репости. граблі про згадує пакет акцій. rake db: migrate or rails db: migrate згадує блок дій, activerecord, activemodel. Хоча деякі з тих, хто навіть є рідними для рейок, не такі дивні, що люди з рейок не змогли правильно підійти.
барлоп

5

Очевидно, що знадобиться певний час, щоб рубінова команда видалила все це попередження у наступній версії рубіну. Поки що команда у вашому терміналі

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

на моєму базовому простому рейки 6.0.2.1 && ruby ​​2.7.0 проект видаліть ці два рядки попередження вище.

Також з командою

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

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

Ви можете об'єднати ці дві команди в одній команді, наприклад:

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

Однак я спробував ці команди всередині свого старого проекту, побудованого з рейками 5.2 та рубіном 2.6.4, пізніше оновлений до рейок 6.0.1, і вони не спрацювали над усіма попереджувальними повідомленнями, отриманими з різних рейок Active * модулів та рубінових дорогоцінних каменів.

Можливо, нам знадобиться певний час для оновлення коду та дорогоцінних каменів для нових останніх матеріалів.


5

Це лише попередження і нічого не вплине. Ви можете просто їх придушити. Я знайшов рішення 2, яке підходить саме мені.

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

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

Варіант 3. Встановіть Warning[:deprecated] = falseсвій рубіновий код

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.