rails ruby-on-rails ruby-on-rails-3 rake

ruby-on-rails - rails - rake migrate



NoMethodError: método indefinido `last_comment ''después de actualizar a rake 11 (5)

Al ejecutar cualquier tarea de rake me sale:

NoMethodError: método indefinido `last_comment ''para

Esto fue después de la bundle update que 11.0.1 la nueva versión de rake, la 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

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 del 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 Rake < v11.0.1 o > v11.0.1 and < v12 funcionará, pero esto sigue siendo una solución y también debe evitarse; idealmente podrás quedarte con los tiempos.

Dado que last_comment está en desuso, la propia dependencia debería actualizarse. En mi caso, fue rspec-core que, por cierto, solo solucionó esto en v3.4.4 .

La solución

Actualice su dependencia a una versión que no llame a last_comment sino que llame a last_description . Es probable que rspec y la actualización de rspec-core a 3.4.4 o superior lo arreglen. rspec-core <3.4.4 llama a last_comment .

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


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

bundle update rspec-rails


Rake 11.0.1 removes el método last_comment que Carriles 2.3 rspec-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''

entonces:

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

Ahora estamos usando rake 10.5.0 que todavía tiene el método last_comment y nuestras tareas de rake volverán a funcionar.

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


Solo actualiza la gema rspec-rails

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

¡abrazos!


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 a Rails.application.load_tasks :

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

así que todo el Rakefile podría verse así

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