NoMethodError: วิธีการที่ไม่ได้กำหนด `` 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>

รุ่น

  • ราง 3.2.11
  • คราด 11.0.1

คำตอบ:


159

คราด 11.0.1 เอาlast_commentวิธีการที่ราง 2.3rspec-core (<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)

ตอนนี้เราใช้ rake 10.5.0 ซึ่งยังมีlast_commentวิธีการและrakeงานของเราจะทำงานอีกครั้ง

อัปเดต : สิ่งนี้ได้รับการแก้ไขแล้วใน rspec ดังนั้นสิ่งเดียวที่จำเป็นควรอัปเดต rspec


ฉันต้องใช้bundle execหลังจากทำสิ่งนี้วิธีการใช้งานrakeโดยไม่ต้องมัด exec ??
svelandiag

คุณสามารถชี้แจง "Rails 2.3" ของคุณใช้ความคิดเห็นได้หรือไม่? ฉันอยู่บน Rails 4 และมีrake db:create:allข้อยกเว้นนี้
yekta

@yekta Rails 2.3 คาดว่า Rake จะมีวิธีที่เรียกว่าlast_commentซึ่งใน codebase นี้ฉันจำไม่ได้ ไม่ทราบว่า Rails 4 โทรมาlast_commentด้วยหรือเปล่า แต่คุณสามารถชำระเงิน codebase ของรางเปลี่ยนไปใช้ Rails 4 branch และ grep สำหรับ "last_comment" ในRakefileและ*.task.
Kris

7
ขอบคุณสำหรับสิ่งนี้ที่ยังช่วยประหยัดเบคอนของเราในปี 2017
Nick Schwaderer

2
@luke rspec 3.5 หรือสูงกว่า
Kris

73

ใน Rails แก้ไขด่วนสามารถแก้ไขได้./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

ขอบคุณ ไม่จำเป็นอีกต่อไปตั้งแต่ Rake 11.1.0
sethcall

10
ดีมีชื่อเสียงไป 5 นาทีของฉัน: D
เทียบเท่า

3
ดูเหมือนว่าการลบlast_comment ได้ถูกเปลี่ยนกลับและตอนนี้จะถูกลบออกในคราด 12.0 แทน
Kris

3
หลังจากอัปเกรดเป็น rake 12.0.0 ฉันเริ่มเห็นข้อผิดพลาดนี้ การแก้ไขอุณหภูมิของ @ equivalent8 ใช้ได้ผลสำหรับฉัน
blackwood

1
การอัปเกรดเป็น rspec-core-3.5.4 แก้ไขปัญหานี้ให้ฉันและฉันสามารถลบโปรแกรมแก้ไขลิงในคำตอบนี้ได้
neontapir

27

การอัปเดตเป็นRspecอัญมณีล่าสุดทำงาน:

bundle update rspec-rails


7
ค้นหาคำตอบของตัวเองใน StackOverflow - 3 ปีตั้งแต่ฉันเขียนมัน - ยังคงใช้งานได้เหมือนเวทมนตร์ :)
Gal Bracha

3
นี่ไม่ใช่ทางออกที่ดี "เสมอไป" ซึ่งสามารถติดตั้งเวอร์ชัน rspec -rails ที่ไม่เข้ากันได้ดีกว่าที่จะระบุเวอร์ชันที่จะใช้เสมอ
Arnold Roa

21

เพียงแค่อัพเกรดอัญมณี rspec-rails

ขณะนี้: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

กอด!


1
gem 'rspec-rails', '~> 3.6'ช่วยชีวิตฉันด้วยขอบคุณมาก !! และฉันคิดว่าฉันมี last_comment ในรหัสของฉัน! LOL
user1735921

20

นี่เป็นปัญหาในการคราดที่ได้รับการแก้ไขแล้ว

คำตอบโดย @ equivalent8 คือแพทช์ลิงและควรหลีกเลี่ยง

ดังที่ @Kris ชี้ให้เห็นว่านี่เป็นปัญหาที่แยกrake 11.0.1ได้ เนื่องจาก @Kris ได้โพสต์คำตอบของเขาจึงมี Rake เวอร์ชันใหม่ที่พร้อมใช้งานและคุณจะสามารถอยู่กับเวลาและไม่ถูกตรึงไว้กับคราดเวอร์ชันเก่า เชื่อฉันฉันเคยไปที่นั่นและไม่ใช่ความคิดที่ดีถ้าคุณสามารถช่วยได้ นอกจากนี้นี่ไม่ใช่ปัญหากับ Rails 2.3 หรือรางรุ่นใด ๆ

Rake ใด ๆ< v11.0.1หรือ> v11.0.1 and < v12จะใช้งานได้ แต่ยังคงเป็นวิธีแก้ปัญหาและควรหลีกเลี่ยง คุณจะสามารถอยู่กับเวลาได้

เนื่องจากlast_commentกำลังเลิกใช้งานการพึ่งพาตัวเองควรได้รับการอัปเกรด ในกรณีของฉันมันเป็นการrspec-coreแก้ไขสิ่งนี้โดยบังเอิญในv3.4.4เท่านั้น

การแก้ไข

อัปเกรดการพึ่งพาของคุณเป็นเวอร์ชันที่ไม่โทรlast_commentแต่โทรlast_descriptionแทน อาจเป็นไปได้rspecและการอัปเกรดrspec-coreเป็น 3.4.4 หรือสูงกว่าจะแก้ไขได้ rspec-core<3.4.4 last_commentโทร

หากการพึ่งพาของคุณไม่มีเวอร์ชันที่โทรไม่ได้last_descriptionจงเป็นพลเมืองที่ดีและส่ง PR เพื่อแก้ไข :)

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