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로그에 두 가지 경고 메시지가 표시됩니다.

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/en/news/2019/12/12/…
Josh Brody

3
@JoshBrody 대단히 감사합니다. 이 링크를 보았고 "사용 중단 경고를 비활성화하려면 명령 줄 인수 -W : no-deprecated를 사용하거나 코드에 Warning [: deprecated] = false를 추가하십시오. " 그러나 나는 actionpack v6.0.2.1에 대한 조금 더 나은 솔루션 / 수정에 대해 생각하고 있었다
Nezir

특히 향후 업그레이드를 원활하게하고 싶을 때 보드 전체에서 사용 중단 경고를 숨기는 것이 나쁜 생각입니다.
블라드

1
@Vlad 동의하지만 소음이 일시적으로 로그를 줄이는 것은 (당신은 당신이 무슨 일을하는지 알고있는 경우) 괜찮
칼릴 Gharbaoui

답변:


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

이전 버전의 루비에서는 작동하지 않을 수 있습니다.

이전 버전의 루비 접두사와의 호환성을 위해 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
이에 대한 한 가지 문제는 -W : no-deprecated '플래그가 유효하지 않은 이전 버전의 Ruby를 설치하면 오류가 발생한다는 것입니다. '- W0'나는 = 수출 RUBYOPT를 사용하여이 고정
아우 Samamé 바리

경고를 표시하지 않는 작업을 호출하는 방법이 있습니까 (예 : 더 이상 사용되지 않는 방식으로 호출)?
barlop

@ barlop 잘 경고하는 것은 작업이 아닙니다. 경고는 기본 코드에서 비롯됩니다. 기본적으로 더 이상 사용되지 않는 코드를 찾아서 수정하면 더 이상 사용되지 않습니다. 그리고 그들이 코드의 일부가 아닌 경우 포함하는 보석의 저장소에 대한 문제를 열거 나 풀 요청을 수정하고 수정을 요청하십시오. 또는 그들이 고치기를 기다립니다. 일부 사용 중단에 대해서는 ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-released 및 여기에 있습니다 : rubyreferences.github.io/rubychanges/2.7.html
Khalil Gharbaoui

@KhalilGharbaoui 감사합니다. 난 그냥 했어. 루비와 레일의 신선한 iniis pastebin.com/SYjypsrP 는 각각 최신 버전을 가지고있는 것처럼 보이고 빈 프로젝트를 만들었고 레이크 지원을 시도하고 레일 db : 마이그레이션으로 경고를 받았습니다. 나는 그 저장소에 가야한다고 생각합니다. actionpack에 대한 언급 rake db : migrate 또는 rails db : migrate는 actionpack, activerecord, activemodel을 언급합니다. 비록 레일에 사람들이 너무 이상해서 레일 사람들이 제대로 얻을 수 없었습니다.
barlop

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-deprecatedbash / zsh 프로파일에서 설정

옵션 3. Warning[:deprecated] = false루비 코드로 설정

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.