67 votes

Comment corriger les messages d'avertissement de Rails avec Ruby 2.7.0

Quelqu'un a-t-il résolu ce problème avec Ruby 2.7.0 ?

Utilicé rbenv et installé Ruby v2.7.0 puis créé un projet Rails en utilisant Rails v6.0.2.1 .

Actuellement, en exécutant l'un des

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

le serveur est en place et le site est servi, mais dans le cadre de la Console Je vois deux messages d'avertissement dans le journal :

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 

Donc, les messages d'avertissement sont :

**.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**

J'ai vu ce lien et il y a quelques suggestions pour changer les avertissements comme "Si vous voulez désactiver les avertissements de dépréciation, veuillez utiliser un argument de ligne de commande -W:no-deprecated ou ajouter Warning[:deprecated] = false à votre code" mais je pensais à une solution/réparation un peu meilleure pour actionpack v6.0.2.1

9 votes

Les arguments positionnels et les arguments mots-clés doivent être séparés dans Ruby 3.0. Il s'agit d'un simple avertissement. Rails est rempli de ce modèle. ruby-lang.org/fr/news/2019/12/12/

4 votes

@JoshBrody merci beaucoup. J'ai vu ce lien et il y a quelques suggestions pour changer les avertissements comme "Si vous voulez désactiver les avertissements de dépréciation, veuillez utiliser un argument de ligne de commande -W:no-deprecated ou ajouter Warning[:deprecated] = false à votre code" mais je pensais à une solution/réparation un peu meilleure pour actionpack v6.0.2.1.

1 votes

Cacher les avertissements de dépréciation à tous les niveaux est une MAUVAISE idée, surtout si vous voulez faciliter vos futures mises à jour.

81voto

Khalil Gharbaoui Points 2220

Pour supprimer les avertissements comme :

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

Pour l'instant, il suffit de préfixer/passer le RUBYOPT à vos commandes de rails :

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

Cela peut ne pas fonctionner avec des versions antérieures de ruby.

Pour une compatibilité ascendante avec les versions antérieures de ruby, préfixez-le avec RUBYOPT='-W0' à la place.

exemple :

RUBYOPT='-W0' bundle exec rspec

Si vous ne voulez pas préfixer ceci à chaque fois que vous exécutez une commande, ajoutez simplement ceci à la dernière ligne de votre commande .zshrc o .bashrc (peu importe ce que vous utilisez) :

export RUBYOPT='-W:no-deprecated -W:no-experimental'
ou
export RUBYOPT='-W0'

Voir aussi le dernier point des notes ici :
https://rubyreferences.github.io/rubychanges/2.7.html#warning-and-

14voto

iGEL Points 2091

Mise à jour vers Rails 6.0.3, ils ont corrigé les avertissements.

Si vous obtenez toujours des avertissements, il s'agit d'autres bibliothèques (voyez s'il existe des versions corrigées ou soumettez un correctif) ou de votre propre code ( comment le réparer ).

0 votes

Comment puis-je corriger cela dans Rails 5 ? La dernière version de Rails 5 contient toujours l'avertissement.

1 votes

@morgler Comme indiqué dans Politique de maintenance de Rails Pour l'instant, seul Rails 6.1 recevra des corrections de bogues. Soit vous mettez à jour vers Rails 6.0.3 ou plus, soit vous créez un fork et corrigez les avertissements vous-même ou trouvez un fork existant, soit vous vivez avec les avertissements ou vous les cachez comme suggéré par les autres réponses.

0 votes

Je reçois les avertissements sur Rails 6.0.3.2

6voto

zire Points 960

Il est évident qu'il faudra un certain temps à l'équipe de Ruby pour supprimer tous ces avertissements dans la prochaine version de Ruby. Pour l'instant la commande dans votre terminal

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

sur mon projet de base, plain new rails 6.0.2.1 && ruby 2.7.0 supprimer ces deux lignes d'avertissement ci-dessus dans une question.

De même, avec la commande

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

vous masquerez les avertissements concernant les fonctionnalités expérimentales.

Vous pouvez combiner ces deux éléments en une seule commande, par exemple :

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

Cependant, j'ai essayé ces commandes dans mon ancien projet construit avec rails 5.2 et ruby 2.6.4 mis à jour ultérieurement vers rails 6.0.1 et elles n'ont pas bien fonctionné à cause de tous les messages d'avertissement que j'ai reçus des différents modules Active* de rails et des gemmes de ruby.

Nous aurons probablement besoin de temps pour mettre à jour le code et les gemmes pour les dernières nouveautés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X