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


43

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

rbenvRuby v2.7.0 を使用してインストールし、次にを使用してRailsプロジェクトを作成しましたRails v6.0.2.1

現在のところ、

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

8
位置引数とキーワード引数は、Ruby 3.0では分離される予定です。これは単なる警告です。Railsはこのパターンで埋められています。ruby-lang.org/en/news/2019/12/12/...
ジョシュ・ブロディ

3
@JoshBrody本当にありがとうございました。私はこのリンクを見て、「廃止予定の警告を無効にしたい場合は、コマンドライン引数-W:no-deprecatedを使用するか、コードにWarning [:deprecated] = falseを追加してください。 」しかし、私はアクションパックv6.0.2.1の少し良い解決策/修正を考えていました
Nezir

特に将来のアップグレードをスムーズにしたい場合は、廃止の警告を全面的に隠すのは悪い考えです。
Vlad

1
@Vladは同意しましたが、ログノイズを一時的に減らすことは問題ありません(何をしているのかわかっている場合)
Khalil Gharbaoui

回答:


55

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

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

コマンドを実行するたびにこれにプレフィックスを付けたくない場合は、.zshrcorまたは.bashrc(使用しているものは何でも)の最後の行にこれを追加します。

export RUBYOPT='-W:no-deprecated -W:no-experimental'
または
export RUBYOPT='-W0'

こちらのメモの最後のポイントもご覧くださいhttps :
//rubyreferences.github.io/rubychanges/2.7.html#warning-and-


1
これに関する1つの問題は、-W:no-deprecated 'フラグが無効であるインストール済みの以前のバージョンのRubyがエラーをスローすることです。export RUBYOPT = '-W0'を使用してこれを修正しました
AugustoSamaméBarrientos

警告を出さないタスクを呼び出す方法、つまり、非推奨ではない方法で呼び出す方法はありますか?
Barlop

@barlopよく警告を出しているのはタスクではありません。警告は、基になるコードから発生します。基本的に、それらが独自のコード内にある場合に非推奨を見つけて修正することで解決します。そして、それらがあなたのコードの一部でない場合は、あなたが含めている宝石のレポで問題をオープンするか、プルリクエストをして、修正を依頼してください。または、それが修正されるのを待ちます。一部の非推奨については、ここに記載されています:ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-released and here:rubyreferences.github.io/rubychanges/2.7.html
Khalil Gharbaoui

@KhalilGharbaouiありがとう。私はちょうどdid.a新鮮なルビーのinsallとIIRCレールpastebin.com/SYjypsrP 私はそれぞれの最新のを持っているように見えますが、私が行ったすべてのレールにも警告を空のプロジェクト、試してみましたレーキのヘルプを作成しましたが、DB:移行を。私はそれらのリポジトリに行くべきだと思います。アクションパックについて言及している熊手。rake db:migrateまたはrails db:migrateは、actionpack、activerecord、activemodelについて言及しています。しかし、レールのネイティブでさえ奇妙なため、レールの人々はそれを正しく理解できませんでした。
Barlop

5

明らかに、Rubyチームが次のRubyバージョンでこの警告をすべて削除するには時間がかかるでしょう。今のところ、あなたの端末でのコマンド

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

私の基本的なプレーンな新しいレール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 gemから受け取ったすべての警告メッセージでうまく機能しませんでした。

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


5

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

オプション1.でレールサーバーを起動する RUBYOPT='-W:no-deprecated' rails s

オプション2. export RUBYOPT='-W:no-deprecatedbash / zshプロファイルで設定する

オプション3. Warning[:deprecated] = falseRubyコードに設定する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.