NoMethodError: rake 11'e yükselttikten sonra tanımsız `` last_comment '' yöntemi


130

Herhangi bir rakegörevi çalıştırırken şunu alırım:

NoMethodError: tanımsız `` last_comment '' yöntemi

Bu daha sonra bundle updatetırmığın yeni versiyonu olan versiyonda çekildi 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: # <Rake :: Application: 0x007ff0cf37be38> için tanımlanmamış `` last_comment '' yöntemi

Sürümler

  • Raylar 3.2.11
  • Komisyon 11.0.1

Yanıtlar:


159

Tırmık 11.0.1 kaldırırlast_comment yöntemle ilgilidirRaylar 2.3rspec-core (<3.4.4) kullanır. Bu nedenle, bir yama yayınlanana kadar / eğer bir yama yayınlanırsa, Gemfile'da daha eski bir sürüme komisyon vermemiz gerekir:

gem 'rake', '< 11.0'

sonra:

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

Halen last_commentmetoda sahip olan 10.5.0 tırmık kullanıyoruz ve rakegörevlerimiz tekrar çalışacak.

GÜNCELLEME : Bu artık rspec'de düzeltildi, bu nedenle gerekli olan tek şey rspec'i güncellemek olmalıdır.


Bunu bundle execyaptıktan sonra kullanmalıyım rake, paket exec olmadan nasıl hala kullanırım ?
svelandiag

"Rails 2.3" kullanımınıza açıklık getirebilir misiniz? Ben Rails 4'teyim ve a rake db:create:allbu istisnayı fırlatıyor.
yekta

@yekta Rails 2.3, Rake denilen bir yönteme sahip olmasını bekler last_comment, kod tabanında bunu hatırlamıyorum. Rails 4 de arar mı bilmiyorum last_comment. Ancak rayların kod tabanını kontrol edebilir, Rails 4 dalına geçebilir Rakefileve ve içindeki "last_comment" için grep yapabilirsiniz *.task.
Kris

7
Bunun için teşekkürler, 2017'de pastırmamızı hala
saklıyoruz

2
@luke rspec 3.5 veya üstü.
Kris

73

Rails'te hızlı düzeltme düzenlenebilir ./Rakefile(uygulama klasörünüzde)

ve aramadan önce şu satırları ekleyin Rails.application.load_tasks:

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

yani tamamı Rakefilegibi görünebilir

  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

Teşekkürler. Rake 11.1.0 itibariyle artık gerekli değil
2016

10
güzel, şöhretin benim 5 dakika oraya gider: D
equivalent8

3
Görünüşe göre kaldırma işlemi last_comment geri alındı ​​ve şimdi bunun yerine 12.0 komisyonunda kaldırılacak.
Kris,

3
12.0.0 komisyonuna yükselttikten sonra bu hatayı görmeye başladım. @ equivalent8'in geçici düzeltmesi benim için çalıştı.
blackwood

1
Rspec-core-3.5.4'e yükseltmek bunu benim için çözdü ve bu cevapta maymun yamasını kaldırabildim.
neontapir

27

En son Rspectaşa güncelleme işi yapar:

bundle update rspec-rails


7
StackOverflow'da kendi cevabımı bulmak - Yazdığımdan beri 3 Yıl - Hala sihir gibi çalışıyor :)
Gal Bracha

3
bu "her zaman" iyi bir çözüm değildir, bu uyumlu olmayan bir rspec -rails sürümünü kurabilir, her zaman kullanılacak sürümü belirtmek daha iyidir.
Arnold Roa

21

Sadece mücevheri yükseltin rspec-rails

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

sarılmalar!


1
gem 'rspec-rails', '~> 3.6'hayatımı kurtardım, çok teşekkürler !! Ve kodumun içinde last_comment gibi bir şey olduğunu düşündüm! LOL
user1735921

20

Bu, halihazırda ele alınmış olan komisyondaki bir sorundur .

@ Eşdeğeri8'in cevabı bir maymun yamasıdır ve bundan kaçınılmalıdır.

@Kris'in işaret ettiği gibi, bu izole edilmiş bir konu rake 11.0.1. @Kris cevabını yayınladığından beri, Rake'in yeni versiyonları mevcut ve ideal olarak, zamanın içinde kalabilmeniz ve komisyonun eski bir versiyonuna sabitlenmemeniz gerekir. İnan bana, oradaydım ve yardım edebilirsen bu iyi bir fikir değil. Ayrıca bu, Rails 2.3 veya herhangi bir ray sürümünde sorun değildir.

Herhangi bir Tırmık < v11.0.1veya > v11.0.1 and < v12işe yarayacak ama bu hala bir çözümdür ve bundan kaçınılmalıdır; ideal olarak zamanın yanında kalabileceksiniz.

Kullanımdan last_commentkaldırıldığından, bağımlılığın kendisi yükseltilmelidir. Benim durumumda, rspec-coretesadüfen bunu yalnızca v3.4.4'te düzeltti .

Çözüm

Bağımlılığınızı çağırmayan last_comment, last_descriptiononun yerine çağıran bir sürüme yükseltin . Muhtemelen rspecve rspec-core3.4.4 veya daha üstüne yükseltmek onu düzeltecektir. rspec-core<3.4.4 aramalar last_comment.

Bağımlılığınızın aranmayan bir sürümü yoksa last_description, iyi bir vatandaş olun ve düzeltmek için bir PR gönderin :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.