Rails uyarı mesajlarını Ruby 2.7.0 ile düzeltme


43

Bu sorunu çözen oldu Ruby 2.7.0mu?

rbenvRuby v2.7.0'ı kullandım ve yükledim ve ardından kullanarak bir Rails projesi oluşturdum Rails v6.0.2.1.

Şu anda,

rails s
rails s -u puma
rails s -u webrick

sunucu çalışıyor ve site sunuluyor ancak Consolegünlükte iki uyarı mesajı görüyorum:

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 

Yani, uyarı mesajları:

**.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
Konumsal ve anahtar kelime bağımsız değişkenleri Ruby 3.0'da ayrılmalıdır. Bu sadece bir uyarı. Raylar bu desenle doldurulur. ruby-lang.org/tr/news/2019/12/12/…
Josh Brody

3
@JoshBrody çok teşekkür ederim. Bu bağlantıyı gördüm ve "Kullanımdan kaldırma uyarılarını devre dışı bırakmak istiyorsanız, lütfen bir komut satırı argümanı kullanın -W: kullanımdan kaldırıldı veya Uyarı [: kullanımdan kaldırıldı] = kodunuza false. " ama ben actionpack v6.0.2.1 için biraz daha iyi bir çözüm / düzeltme düşünüyordum
Nezir

Kullanımdan kaldırma uyarılarını tahtada gizlemek, özellikle gelecekteki yükseltmelerinizi düzeltmek istediğinizde KÖTÜ bir fikirdir.
Vlad

1
@Vlad kabul etti, ancak günlük gürültüyü geçici olarak azaltmak tamam (ne yaptığını biliyorsanız)
Khalil Gharbaoui

Yanıtlar:


54

Gibi uyarıları bastırmak için:

warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

Şimdilik, RUBYOPTortam değişkenini ray komutlarınıza önekleyin / iletin:

RUBYOPT='-W:no-deprecated -W:no-experimental' rails server
veya
RUBYOPT='-W:no-deprecated -W:no-experimental' rails db:migrate

Bu, ruby'nin önceki sürümleriyle çalışmayabilir.

Ruby'nin önceki sürümleriyle geriye dönük uyumluluk için RUBYOPT='-W0'bunun yerine önek ekleyin .

misal:

RUBYOPT='-W0' bundle exec rspec

Her komut çalıştırdığınızda buna önek eklemek istemiyorsanız, bunu .zshrcveya son satırınıza .bashrc(ne kullanırsanız kullanın) eklemeniz yeterlidir :

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

Ayrıca notların son noktasına bakınız:
https://rubyreferences.github.io/rubychanges/2.7.html#warning-and-


1
Bununla ilgili bir sorun, -W: kullanımdan kaldırıldı 'bayrağının geçerli olmadığı Ruby'nin önceki sürümlerinin bir hata atmasıdır. Bunu ihracat RUBYOPT = '- W0' kullanarak düzelttim
Augusto Samamé Barrientos

Uyarı vermeyecek bir görevi çağırmanın, yani onu kullanımdan kaldırılmamış bir şekilde çağırmanın bir yolu var mı?
barlop

@barlop iyi uyarı veren görev değil. Uyarılar temel koddan gelir. Temel olarak, kendi kodunuzda olan kullanımdan çıkarmaları bulmak ve düzeltmek olacaktır. Ve onlar kodunuzun bir parçası değilse, o zaman açık sorunlar veya dahil ettiğiniz taşlar depoları üzerine istekleri çekin ve bir düzeltme isteyin. veya düzeltmelerini bekleyin. Bazı itirazlar burada belirtilmiştir: ruby-lang.org/en/news/2019/12/25/ruby-2-7-0- yayımlandı
Khalil Gharbaoui

@KhalilGharbaoui Teşekkürler. Ben sadece yaptım. Yakut ve raylar taze bir insir iirc pastebin.com/SYjypsrP ben her biri en son var gibi görünüyor ve tüm yaptığım boş bir proje oluşturuldu, komisyon yardım çalıştı ve ayrıca raylar db ile uyarı var: göç. Sanırım o depolara gitmeliyim. bahsetmek hakkında komisyon aksiyon paketi. komisyon db: göç veya raylar db: göç eylem paketi, aktüatör, aktif modelden bahseder. Rağmen raylar için doğal olanlar bile o kadar tuhaf raylar insanlar doğru alamadım.
barlop

5

Açıkçası yakut ekibinin bir sonraki yakut versiyonundaki tüm bu uyarıyı kaldırması biraz zaman alacaktır. Şimdilik terminalinizdeki komut

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

temel, düz yeni raylarım 6.0.2.1 && ruby ​​2.7.0 projemde yukarıdaki iki uyarı çizgisini bir soruda kaldırın.

Ayrıca, komut ile

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

deneysel özelliklerle ilgili uyarıları gizleyeceksiniz.

Bu ikisini tek bir komutta birleştirebilirsiniz:

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

Ancak, bu komutları 5.2 ve raylar 2.6.4 ile oluşturulmuş eski projemde daha sonra 6.0.1 raylarına yükselttim ve farklı raylar Active * modülleri ve yakut taşlardan aldığım tüm uyarı mesajları için iyi çalışmadı.

Muhtemelen en yeni şeyler için kod ve mücevherleri yükseltmek için biraz zamana ihtiyacımız olacak.


5

Bu sadece bir uyarı ve hiçbir şey etkilemez. Sadece bastırabilirsiniz. Çözüm 2'nin benim için uygun olduğunu buldum.

Seçenek 1. Rails sunucusunu RUBYOPT='-W:no-deprecated' rails s

2. Seçenek export RUBYOPT='-W:no-deprecated. Bash / zsh profilinizde ayarlayın

Seçenek 3. Warning[:deprecated] = falseYakut kodunuzu ayarlayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.