วิธีแก้ไขข้อความเตือนของ Rails ด้วย Ruby 2.7.0


43

ไม่มีใครแก้ไขปัญหานี้ด้วยRuby 2.7.0?

ผมใช้rbenvและติดตั้งทับทิม v2.7.0 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 นี่คือคำเตือนเพียง Rails เต็มไปด้วยรูปแบบนี้ ruby-lang.org/en/news/2019/12/12/…
Josh Brody

3
@JoshBrody ขอบคุณมาก ฉันเห็นลิงก์นี้และมีคำแนะนำให้เปลี่ยนคำเตือนเช่น "หากคุณต้องการปิดใช้งานคำเตือนการคัดค้านโปรดใช้อาร์กิวเมนต์บรรทัดคำสั่ง -W: ไม่คัดค้านหรือเพิ่มคำเตือน [: คัดค้าน] = เท็จในรหัสของคุณ " แต่ฉันคิดในการแก้ปัญหาที่ดีกว่า / แก้ไขเล็กน้อยสำหรับ actionpack v6.0.2.1
Nezir

การซ่อนคำเตือนการคัดค้านทั่วกระดานเป็นความคิดที่ไม่ดีโดยเฉพาะเมื่อคุณต้องการทำให้การอัพเกรดในอนาคตของคุณราบรื่น

1
@Vlad ตกลง แต่ลดเสียงบันทึกชั่วคราวก็โอเค (ถ้าคุณรู้ว่าคุณกำลังทำอะไรอยู่)
Khalil 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
ปัญหาหนึ่งคือการติดตั้ง Ruby เวอร์ชันก่อนหน้านี้ซึ่งแฟล็ก -W: no-deprecated 'ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด ฉันแก้ไขสิ่งนี้โดยใช้ export RUBYOPT = '- W0'
Augusto Samamé Barrientos

มีวิธีการโทรงานที่จะไม่ให้คำเตือนคือการโทรในวิธีที่ไม่เลิก?
barlop

@barlop ดีไม่ใช่งานที่ให้คำเตือน คำเตือนมาจากรหัสพื้นฐาน โดยทั่วไปการหาค่าเสื่อมราคาหากพวกเขาอยู่ในรหัสของคุณเองและแก้ไขพวกเขาจะทำ และหากพวกเขาไม่ได้เป็นส่วนหนึ่งของรหัสของคุณแล้วเปิดปัญหาหรือดึงคำขอใน repos ของอัญมณีที่คุณกำลังรวมและขอให้แก้ไข หรือเพียงแค่รอให้พวกเขาแก้ไข มีการกล่าวถึงการคัดค้านบางอย่างที่นี่: ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-releaseและที่นี่: rubyreferences.github.io/rubychanges/2.7.html
Khalil Gharbaoui

@KhalilGharbaoui ขอบคุณ ฉันเพิ่งทำ insall ที่สดใหม่ของ ruby ​​และ rails iirc pastebin.com/SYjypsrP ดูเหมือนว่าฉันมีล่าสุดและทุกสิ่งที่ฉันทำถูกสร้างขึ้นในโครงการเปล่าพยายามช่วยเหลือ rake และได้รับคำเตือนด้วย Rails db: migrate ฉันเดาว่าฉันควรไปที่ repos เหล่านั้น เรคเกี่ยวกับ actionpack ที่กล่าวถึง rake db: migrate หรือ rails db: migrate mentions actionpack, activerecord, activemodel แม้ว่าจะไม่ใช่บางคนที่มีถิ่นกำเนิดในรางแปลก ๆ จนผู้คนไม่สามารถทำให้ถูกต้องได้
barlop

5

เห็นได้ชัดว่ามันต้องใช้เวลาพอสมควรสำหรับทีมทับทิมในการลบคำเตือนทั้งหมดนี้ในรุ่นทับทิมถัดไป สำหรับตอนนี้คำสั่งใน terminal ของคุณ

`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

อย่างไรก็ตามฉันลองใช้คำสั่งเหล่านี้ในโครงการเก่าของฉันที่สร้างด้วย Rails 5.2 และ ruby ​​2.6.4 อัพเกรดเป็น Rails 6.0.1 ในภายหลังและพวกเขาก็ใช้งานไม่ได้กับข้อความคำเตือนทั้งหมดที่ฉันได้รับจากโมดูล Active * ของ Rails และพลอยทับทิม

อาจเป็นไปได้ว่าเราจะต้องใช้เวลาในการอัปเกรดรหัสและอัญมณีสำหรับสิ่งใหม่ล่าสุด


5

เป็นเพียงคำเตือนและจะไม่ส่งผลกระทบอะไรเลย คุณสามารถระงับพวกเขาได้ ฉันพบโซลูชันที่ 2 เพื่อให้เหมาะกับฉัน

ตัวเลือก 1. เริ่มเซิร์ฟเวอร์ rails ด้วย RUBYOPT='-W:no-deprecated' rails s

ตัวเลือก 2. ตั้งค่าexport RUBYOPT='-W:no-deprecatedในโปรไฟล์ bash / zsh ของคุณ

ตัวเลือก 3. ตั้งWarning[:deprecated] = falseรหัสทับทิมของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.