NoMethodError: método indefinido 'last_comment' después de actualizar a rake 11

130

Al ejecutar cualquier raketarea obtengo:

NoMethodError: método indefinido `last_comment 'para

Esto fue después de lo bundle updatecual sacó la nueva versión de rake, versión 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: método indefinido `last_comment 'para # <Rake :: Aplicación: 0x007ff0cf37be38>

Versiones

  • Carriles 3.2.11
  • Rastrillo 11.0.1
Kris
fuente

Respuestas:

159

Rake 11.0.1 elimina el last_commentmétodo queCarriles 2.3rspec-core (<3.4.4) utiliza. Por lo tanto, hasta que se publique un parche, necesitamos fijar el rastrillo a una versión anterior en Gemfile:

gem 'rake', '< 11.0'

luego:

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

Ahora estamos usando el rastrillo 10.5.0 que todavía tiene el last_commentmétodo y nuestras raketareas volverán a funcionar.

ACTUALIZACIÓN : Esto ahora se ha solucionado en rspec, por lo que lo único necesario debería ser actualizar rspec.

Kris
fuente
Tengo que usar bundle execdespués de hacer esto, ¿cómo seguir usando rakesin el paquete exec?
svelandiag
¿Puedes aclarar tu "Rails 2.3" utiliza comentarios? Estoy en Rails 4 y rake db:create:alllanza esta excepción.
yekta
@yekta Rails 2.3 espera que Rake tenga un método llamado last_comment, donde en la base de código esto no lo recuerdo. No sé si Rails 4 también llama last_comment. Pero puede verificar la base de código de rails, cambiar a la rama Rails 4 y grep para "last_comment" en Rakefiley *.task.
Kris
77
Gracias por esto, aún ahorrando nuestro tocino en 2017.
Nick Schwaderer
2
@luke rspec 3.5 o superior.
Kris
73

en Rails, la solución rápida se puede editar ./Rakefile(en la carpeta de la aplicación)

y agregue estas líneas antes de llamar Rails.application.load_tasks:

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

tan completo Rakefilepodría parecer

  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
equivalente8
fuente
Gracias. Ya no es necesario a partir de Rake 11.1.0
sethcall
10
bueno, ahí van mis 5 minutos de fama: D
equivalente8
3
Parece que la eliminación de last_comment se revirtió y ahora se eliminará en el rastrillo 12.0.
Kris
3
Después de actualizar a rake 12.0.0, comencé a ver este error. La solución temporal de @ equivalente8 funcionó para mí.
blackwood
1
La actualización a rspec-core-3.5.4 resolvió esto por mí y pude eliminar el parche de mono en esta respuesta.
neontapir
27

La actualización a la última Rspecgema hace el trabajo:

bundle update rspec-rails

Gal Bracha
fuente
77
Encontrar mi propia respuesta en StackOverflow - 3 años desde que la escribí - Todavía funciona como magia :)
Gal Bracha
3
esto no es "siempre" una buena solución, esto podría instalar una versión rspec -rails no compatible, es mejor especificar siempre la versión a utilizar.
Arnold Roa
21

Solo actualiza la gema rspec-rails

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

¡abrazos!

EderCosta
fuente
1
gem 'rspec-rails', '~> 3.6'me salvó la vida, muchas gracias !! ¡Y pensé que tenía algo como last_comment dentro de mi código! LOL
user1735921
20

Este es un problema en el rastrillo que ya se ha abordado.

La respuesta de @ equivalente8 es un parche de mono y debe evitarse.

Como señala @Kris, este es un problema aislado rake 11.0.1. Dado que @Kris ha publicado su respuesta, hay nuevas versiones de Rake disponibles e, idealmente, podría quedarse con los tiempos y no estar sujeto a una versión anterior de Rake. Créeme, he estado allí y no es una buena idea si puedes evitarlo. Además, esto no es un problema con Rails 2.3 o cualquier versión de rails.

Cualquier rastrillo < v11.0.1o > v11.0.1 and < v12funcionará, pero esto sigue siendo una solución y también debe evitarse; idealmente podrás quedarte con los tiempos.

Como last_commentestá en desuso, la dependencia en sí misma debe actualizarse. En mi caso fue lo rspec-coreque, por cierto, solo solucionó esto en v3.4.4 .

La solución

Actualice su dependencia a una versión que no llame, last_commentsino que llame last_description. Es probable rspecy la actualización rspec-corea 3.4.4 o superior lo solucionará. rspec-core<3.4.4 llamadas last_comment.

Si su dependencia no tiene una versión que no llame last_description, sea un buen ciudadano y envíe un RP para solucionarlo :)

yekta
fuente