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

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.


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

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


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!


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 :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.