web-dev-qa-db-ja.com

Ruby 2.7.0でRailsの警告メッセージを修正する方法

誰かがRuby 2.7.0でこの問題を解決しましたか?

私はrbenvを使用してRuby v2.7.0をインストールし、Rails v6.0.2.1を使用してRailsプロジェクトを作成しました。

現在のところ、

Rails s
Rails s -u puma
Rails s -u webrick

サーバーは稼働しており、サイトは提供されていますが、Consoleログに2つの警告メッセージが表示されます。

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

次のような警告を抑制するには:

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-

30

Rubyチームが次のRubyバージョンでこの警告をすべて削除するには、しばらく時間がかかります。とりあえず、ターミナルでのコマンド

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

私の基本的なプレーンな新しいRails 6.0.2.1 && Ruby 2.7.0プロジェクトでは、上記の2つの警告行を質問から削除します。

また、コマンドで

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

実験的な機能に関する警告を非表示にします。

次のような1つのコマンドでこれら2つを組み合わせることができます。

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

しかし、Rails 5.2とRuby 2.6.4を後でRailsにアップグレードして、 6.0.1と私は異なるRails Active *モジュールとRuby gems。

おそらく、コードやgemを新しい最新のものにアップグレードするために、しばらく時間が必要になるでしょう。

3
Nezir

単なる警告であり、何にも影響しません。単にそれらを抑制することができます。ソリューション2が自分にぴったりであることがわかりました。

オプション1. RailsサーバーをRUBYOPT='-W:no-deprecated' Rails sで起動します

オプション2. bash/zshプロファイルにexport RUBYOPT='-W:no-deprecatedを設定します

オプション3. RubyコードでWarning[:deprecated] = falseを設定します

1
Sajidur Rahman