रूबी 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
रूबी 3.0 में स्थिति संबंधी तर्क और कीवर्ड तर्क अलग किए जाने हैं। यह एक मात्र चेतावनी है। इस पैटर्न से रेल भरी जाती है। ruby-lang.org/en/news/2019/12/12/…
जोश ब्रोडी

3
@JoshBrody आपका बहुत-बहुत धन्यवाद। मैंने इस लिंक को देखा और चेतावनी के स्विच करने के लिए कुछ सुझाव दिए हैं जैसे "यदि आप डिप्रेशन चेतावनियों को अक्षम करना चाहते हैं, तो कृपया कमांड-लाइन तर्क का उपयोग करें -W: नो-डिप्रेकेटेड या वार्निंग जोड़ें: [डीआरक्रिएटेड] अपने कोड के लिए" झूठे "। " लेकिन मैं एक्शन पैक v6.0.2.1 के लिए थोड़ा बेहतर समाधान / फिक्स पर सोच रहा था
Nezir

बोर्ड भर में पदावनति चेतावनियाँ छिपाना एक बुरा विचार है, खासकर जब आप अपने भविष्य के उन्नयन को सुचारू करना चाहते हैं।
Vlad

1
@ व्लाद सहमत हुए लेकिन लॉग शोर को अस्थायी रूप से कम करना ठीक है (यदि आप जानते हैं कि आप क्या कर रहे हैं)
खलील घरौई

जवाबों:


54

चेतावनी को दबाने के लिए:

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

अभी के लिए, बस उपसर्ग / RUBYOPTपर्यावरण चर को अपनी रेल कमांड में पास करें:

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 'ध्वज मान्य नहीं है, एक त्रुटि फेंक देगा। मैंने एक्सपोर्ट RUBYOPT = '- W0'
अगस्टो समामे बेरिएंटोस

क्या कार्य को कॉल करने का एक तरीका है जो चेतावनी नहीं देगा, अर्थात इसे इस तरह से कॉल करना जो कि पदावनत न हो?
बार्लॉप

@barlop यह चेतावनी देने वाला कार्य नहीं है। चेतावनियाँ अंतर्निहित कोड से आती हैं। मूल रूप से पदावनति खोजना अगर वे आपके ही कोड में हैं और उन्हें ठीक करना है। और अगर वे आपके कोड का हिस्सा नहीं हैं, तो उन मुद्दों को खोलें या जिन रत्नों को आप शामिल कर रहे हैं, उनके रिपोज पर अनुरोध करें और उन्हें ठीक करने के लिए कहें। या बस उन्हें ठीक करने के लिए प्रतीक्षा करें। कुछ अवतरण यहाँ उल्लिखित हैं: ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-released और यहाँ: rubyreferences.github.io/rubychanges/2.7.html
खलील घरबौई

@KhalilGharbaoui धन्यवाद। मैंने अभी-अभी रूबी और रेल्स के नए सिरे का निरीक्षण किया है iirc pastebin.com/SYjypsrP ऐसा लगता है कि मेरे पास प्रत्येक का नवीनतम है और मैंने जो किया था वह एक रिक्त प्रोजेक्ट बनाया गया था, रेक सहायता की कोशिश की और रब डीबी के साथ चेतावनी भी प्राप्त की: माइग्रेट। मुझे लगता है कि मुझे उन रेपो पर जाना चाहिए। उल्लेख एक्शनपैक के बारे में। रेक डीबी: माइग्रेट या रेल्स डीबी: माइग्रेट में एक्शनपैक, एक्टिवरकॉर्ड, एक्टिवमॉडल का उल्लेख है। हालांकि उन लोगों में से कुछ मूल निवासी भी इतने अजीब नहीं हैं कि रेल लोगों को सही नहीं मिल सके।
बार्लॉप

5

जाहिर है कि माणिक की टीम को अगले माणिक संस्करण में इस सारी चेतावनी को हटाने में कुछ समय लगेगा। अब आपके टर्मिनल में कमांड के लिए

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

मेरे मूल, सादे नए रेल 6.0.2.1 && रूबी 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 रेल पर अपग्रेड हो गया और उन्होंने अलग-अलग रेल एक्टिव * मॉड्यूल्स और रूबी रत्नों से प्राप्त सभी चेतावनियों के लिए अच्छा काम नहीं किया।

संभवतः हमें नए नवीनतम सामान के लिए कोड और रत्नों के उन्नयन के लिए कुछ समय की आवश्यकता होगी।


5

इसकी सिर्फ एक चेतावनी के रूप में और कुछ भी प्रभावित नहीं करेगा। आप बस उन्हें दबा सकते हैं। मैंने समाधान 2 को मेरे लिए सही फिट पाया।

विकल्प 1. रेल सर्वर की शुरुआत करें RUBYOPT='-W:no-deprecated' rails s

विकल्प 2. export RUBYOPT='-W:no-deprecatedअपने बैश / zsh प्रोफाइल में सेट करें

विकल्प 3. Warning[:deprecated] = falseअपने रूबी कोड में सेट करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.