NoMethodError: metode yang tidak ditentukan `last_comment 'setelah memutakhirkan ke rake 11

130

Saat menjalankan raketugas apa pun yang saya dapatkan:

NoMethodError: metode `last_comment 'tidak terdefinisi untuk

Ini setelah bundle updateitu menarik versi baru rake, versi 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: metode yang tidak ditentukan `last_comment 'untuk # <Rake :: Aplikasi: 0x007ff0cf37be38>

Versi

  • Rel 3.2.11
  • Rake 11.0.1
Keris
sumber

Jawaban:

159

Rake 11.0.1 menghilangkan yang last_commentmetode yangRails 2.3rspec-core (<3.4.4) menggunakan. Oleh karena itu sampai / jika sebuah patch dirilis, kita perlu menyematkan rake ke versi yang lebih lama di Gemfile:

gem 'rake', '< 11.0'

kemudian:

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

Kami sekarang menggunakan rake 10.5.0 yang masih memiliki last_commentmetode dan raketugas kami akan bekerja lagi.

PEMBARUAN : Ini sekarang telah diperbaiki di rspec, jadi satu-satunya hal yang perlu adalah memperbarui rspec.

Keris
sumber
Saya harus menggunakan bundle execsetelah melakukan ini, bagaimana tetap menggunakan raketanpa bundel exec ??
svelandiag
Bisakah Anda memperjelas "Rails 2.3" Anda menggunakan komentar? Saya di Rails 4 dan rake db:create:allmelempar pengecualian ini.
yekta
@yekta Rails 2.3 mengharapkan Rake memiliki metode yang disebut last_comment, di mana dalam basis kode ini saya tidak ingat. Saya tidak tahu apakah Rails 4 juga menelepon last_comment. Tapi Anda bisa checkout basis kode rel, beralih ke cabang Rails 4 dan grep untuk "last_comment" di Rakefiledan *.task.
Kris
7
Terima kasih untuk ini, masih menyimpan bacon kami di 2017.
Nick Schwaderer
2
@ Lukas rspec 3.5 atau lebih tinggi.
Kris
73

dalam perbaikan cepat Rails dapat diedit ./Rakefile(di folder aplikasi Anda)

dan tambahkan baris ini sebelum memanggil Rails.application.load_tasks:

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

jadi seluruh Rakefilemungkin terlihat seperti

  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
setara8
sumber
Terima kasih. Tidak lagi diperlukan pada Rake
11.1.0
10
bagus, hilang 5 menit ketenaran saya: D
setara
3
Sepertinya penghapusan telah last_comment dikembalikan dan sekarang akan dihapus di rake 12.0 sebagai gantinya.
Kris
3
Setelah upgrade ke rake 12.0.0 saya mulai melihat kesalahan ini. perbaikan temporer @ equival8 bekerja untuk saya.
blackwood
1
Meng-upgrade ke rspec-core-3.5.4 menyelesaikan ini untuk saya dan saya dapat menghapus patch monyet dalam jawaban ini.
neontapir
27

Pembaruan untuk Rspecpermata terbaru berfungsi:

bundle update rspec-rails

Gal Bracha
sumber
7
Menemukan jawaban saya sendiri di StackOverflow - 3 Tahun Sejak saya menulisnya - Masih berfungsi seperti sihir :)
Gal Bracha
3
ini bukan "selalu" solusi yang baik, ini bisa menginstal versi rspec -rails yang tidak kompatibel, lebih baik untuk selalu menentukan verison yang akan digunakan.
Arnold Roa
21

Tingkatkan saja permata rspec-rails

Sekarang: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

pelukan!

EderCosta
sumber
1
gem 'rspec-rails', '~> 3.6'menyelamatkan hidup saya, terima kasih banyak !! Dan saya pikir saya memiliki sesuatu seperti last_comment di dalam kode saya! LOL
user1735921
20

Ini merupakan masalah dalam rake yang telah ditangani.

Jawaban oleh @ equival8 adalah patch monyet dan harus dihindari.

Seperti yang ditunjukkan oleh @Kris, ini adalah masalah yang diisolasi rake 11.0.1. Karena @Kris telah memposting jawabannya, ada versi baru Rake yang tersedia dan idealnya Anda dapat mengikuti perkembangan zaman dan tidak disematkan ke versi rake yang lama. Percayalah, saya pernah ke sana dan itu bukan ide yang baik jika Anda dapat membantu. Juga ini bukan masalah dengan Rails 2.3 atau versi rails apa pun.

Setiap Rake < v11.0.1atau > v11.0.1 and < v12akan bekerja tetapi ini masih bekerja dan juga harus dihindari; idealnya Anda akan bisa mengikuti perkembangan zaman.

Karena last_commentsudah ditinggalkan ketergantungan itu sendiri harus ditingkatkan. Dalam kasus saya itu rspec-coreyang kebetulan hanya memperbaiki ini di v3.4.4 .

Cara Mengatasinya

Tingkatkan ketergantungan Anda ke versi yang tidak memanggil last_commenttetapi memanggil last_descriptionsaja. Mungkin rspecdan meningkatkan rspec-coreke 3.4.4 atau lebih tinggi akan memperbaikinya. rspec-core<3.4.4 panggilan last_comment.

Jika ketergantungan Anda tidak memiliki versi yang tidak dapat dihubungi last_description, jadilah warga negara yang baik dan kirimkan PR untuk memperbaikinya :)

yekta
sumber