NoMethodError: अपरिभाषित विधि com last_comment ’को रेक 11 में अपग्रेड करने के बाद


130

किसी भी rakeकार्य को चलाने पर मुझे:

NoMethodError: अपरिभाषित विधि `last_comment 'के लिए

यह बाद bundle updateमें रेक के नए संस्करण में खींचा गया था , संस्करण 11.0.1

$ grep rake Gemfile.lock
       rake
       rake (>= 0.8.7)
     rake (11.0.1)
       rake
$ bundle update
$ bundle exec rake db:drop # any rake task

NoMethodError: अपरिभाषित विधि `last_comment 'के लिए # <Rake :: Application: 0x007ff0cf37be38>

संस्करण

  • रेलगाड़ी ३.२.११
  • रेक 11.0.1

जवाबों:


159

रेक 11.0.1 विधि को हटाता है last_commentजोरेल २.३rspec- कोर (<3.4.4) का उपयोग करता है। इसलिए जब तक / अगर एक पैच जारी किया जाता है, तो हमें Gemfile में एक पुराने संस्करण में रेक को पिन करना होगा:

gem 'rake', '< 11.0'

फिर:

$ bundle update
$ grep rake Gemfile.lock 
      rake
      rake (>= 0.8.7)
    rake (10.5.0)
      rake
  rake (< 11.0)

हम अब रेक का उपयोग कर रहे हैं 10.5.0 जिसमें अभी भी last_commentविधि है और हमारे rakeकार्य फिर से काम करेंगे।

अद्यतन : यह अब rspec में तय किया गया है, इसलिए केवल आवश्यक चीज rspec को अद्यतन करना चाहिए।


मुझे यह करने के bundle execबाद उपयोग करना है, बस rakeबंडल निष्पादन के बिना अभी भी कैसे उपयोग करना है ??
स्वेलंडीग

क्या आप टिप्पणी का उपयोग करते हुए अपने "रेल 2.3" को स्पष्ट कर सकते हैं? मैं रेल 4 पर हूं और rake db:create:allयह अपवाद फेंकता है।
यक्ष

@yekta रेल 2.3 उम्मीद करता है कि रेक को एक विधि कहा जाता है last_comment, जहां कोडबेस में यह मुझे याद नहीं है। मुझे नहीं पता कि रेल 4 भी कॉल करता है last_comment। लेकिन आप चेकआउट कर सकता है रेल रेल 4 शाखा और "last_comment के लिए" ग्रेप में करने के लिए codebase, स्विच Rakefileऔर *.task
क्रिश

7
इसके लिए आपको धन्यवाद, 2017 में अभी भी हमारे बेकन को बचा रहा है।
निक श्ववाडर

2
@ ल्यूक 3.5 या उससे अधिक।
क्रिश

73

रेल में त्वरित सुधार संपादित किया जा सकता है ./Rakefile(आपके ऐप फ़ोल्डर में)

और कॉल करने से पहले इन पंक्तियों को जोड़ें Rails.application.load_tasks:

module TempFixForRakeLastComment
  def last_comment
    last_description
  end 
end
Rake::Application.send :include, TempFixForRakeLastComment

तो पूरा Rakefileलग सकता है

  require File.expand_path('../config/application', __FILE__)
  require 'rake'
  require 'resque/tasks'

+ # temp fix for NoMethodError: undefined method `last_comment'
+ # remove when fixed in Rake 11.x
+ module TempFixForRakeLastComment
+   def last_comment
+     last_description
+   end 
+ end
+ Rake::Application.send :include, TempFixForRakeLastComment
+ ### end of temfix
+ 
  task "resque:preload" => :environment

  Rails.application.load_tasks

धन्यवाद। अब रेक 11.1.0 के रूप में आवश्यक नहीं है
सेहकल

10
अच्छा, वहाँ मेरी 5 मिनट की प्रसिद्धि जाती है: D
समकक्ष

3
ऐसा लगता है कि हटाए गए को हटा दिया last_comment गया है और अब इसके बजाय रेक 12.0 में निकाला जाएगा।
क्रिश

3
12.0.0 रेक अपग्रेड करने के बाद मुझे यह त्रुटि दिखाई देने लगी। @ समतुल्य का अस्थायी निर्धारण मेरे लिए काम करता है।
14:11

1
Rspec-core-3.5.4 में अपग्रेड करने से यह मेरे लिए हल हो गया और मैं इस जवाब में बंदर के पैच को हटाने में सक्षम था।
नेणतापीर

27

नवीनतम Rspecमणि को अद्यतन कार्य करता है:

bundle update rspec-rails


7
StackOverflow पर अपना जवाब ढूंढना - 3 साल जब से मैंने इसे लिखा है - फिर भी जादू की तरह काम करता है :)
Gal Bracha

3
यह "हमेशा" एक अच्छा समाधान नहीं है, यह एक गैर-संगत rspec -rails संस्करण स्थापित कर सकता है, यह हमेशा उपयोग करने के लिए वर्जन निर्दिष्ट करना बेहतर होता है।
अर्नोल्ड रोआ

21

बस मणि को अपग्रेड करें rspec-rails

अभी: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

गले!


1
gem 'rspec-rails', '~> 3.6'मेरी जान बचाई, बहुत बहुत धन्यवाद !! और मैंने सोचा कि मुझे अपने कोड के अंदर last_comment जैसा कुछ है! LOL
user1735921

20

यह रेक में एक मुद्दा है जिसे पहले ही संबोधित किया जा चुका है।

@ समतुल्य @ द्वारा जवाब एक बंदर पैच है और इसे टाला जाना चाहिए।

जैसा कि @ क्रिस बताते हैं, यह एक ऐसा मुद्दा है जिसे अलग किया गया है rake 11.0.1। चूंकि @ क्रिस ने अपना जवाब पोस्ट किया है, रेक के नए संस्करण उपलब्ध हैं और आदर्श रूप से आप समय के साथ रह पाएंगे और रेक के पुराने संस्करण पर पिन नहीं किया जा सकेगा। मेरा विश्वास करो, मैं वहां गया हूं और यह एक अच्छा विचार नहीं है यदि आप इसकी मदद कर सकते हैं। इसके अलावा यह रेल 2.3 या रेल के किसी भी संस्करण के साथ एक मुद्दा नहीं है।

कोई भी रेक < v11.0.1या > v11.0.1 and < v12काम करेगा लेकिन यह अभी भी एक काम है और इसे भी टाला जाना चाहिए; आदर्श रूप से आप समय के साथ रह पाएंगे।

चूंकि last_commentपदावनत किया जा रहा है इसलिए निर्भरता को ही उन्नत किया जाना चाहिए। मेरे मामले में यह rspec-coreकेवल आकस्मिक रूप से v3.4.4 में तय किया गया था ।

जोड़

अपनी निर्भरता को एक ऐसे संस्करण में अपग्रेड करें जो कॉल नहीं करता है, last_commentबल्कि last_descriptionइसके बजाय कॉल करता है। शायद यह rspecऔर rspec-core3.4.4 या अधिक करने के लिए उन्नयन इसे ठीक कर देगा। rspec-core<3.4.4 कॉल last_comment

यदि आपकी निर्भरता में ऐसा संस्करण नहीं है जो कॉल नहीं करता है last_description, तो एक अच्छे नागरिक बनें और इसे ठीक करने के लिए पीआर सबमिट करें :)

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