web-dev-qa-db-fra.com

Comment réparer 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?

J'ai utilisé 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 journal Console je vois deux messages d'avertissement:

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 

Ainsi, 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**
35
Nezir

Pour supprimer les avertissements tels que:

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 la variable d'environnement RUBYOPT à vos commandes 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 les versions antérieures de Ruby.

Pour une compatibilité descendante avec les versions antérieures de Ruby préfixez-le avec RUBYOPT='-W0' au lieu.

exemple:

RUBYOPT='-W0' bundle exec rspec

Si vous ne voulez pas le préfixer à chaque fois que vous exécutez une commande, ajoutez simplement ceci à la dernière ligne de votre .zshrc ou .bashrc (quoi que vous utilisiez):

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

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

30
Khalil Gharbaoui

Évidemment, il faudra un certain temps pour que l'équipe Ruby supprime tout cet avertissement dans la prochaine version Ruby. Pour l'instant, la commande dans votre terminal)

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

sur mon projet basique et simple Rails 6.0.2.1 && Ruby 2.7.0 project supprimer ces deux lignes d'avertissement ci-dessus dans une question).

Aussi, avec la commande

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

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

Vous pouvez combiner ces deux commandes en une comme:

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 à niveau plus tard vers Rails 6.0.1 et ils n'ont pas bien fonctionné pour tous les messages d'avertissement que j'ai reçus de différents modules Rails Active * et Ruby gemmes).

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

3
Nezir

C'est juste un avertissement et n'affectera rien Vous pouvez simplement les supprimer. J'ai trouvé que la solution 2 me convenait parfaitement.

Option 1. Démarrez le serveur Rails avec RUBYOPT='-W:no-deprecated' Rails s

Option 2. Définissez export RUBYOPT='-W:no-deprecated dans votre profil bash/zsh

Option 3. Définissez Warning[:deprecated] = false dans votre Ruby code

1
Sajidur Rahman