Undefinierte Methode 'task' mit Rake 0.9.0

132

Ich habe Rake gerade auf die neueste Version ( 0.9.0.beta.4) aktualisiert und der rakeBefehl endet mit der folgenden Fehlermeldung:

rake aborted!
undefined method `task' for #<Anelis::Application:0x9223b6c>

Hier ist die Spur:

undefined method `task' for #<Anelis::Application:0x97ef80c>
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'

Hat jemand das gleiche Problem erlebt? Was könnte möglicherweise falsch sein? Beachten Sie, dass ich Rails 3.0.3laufe. Möglicherweise interessieren Sie sich auch für den Inhalt meiner Gemfile:

source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'mysql2'
gem 'legacy_data'
gem 'resources_controller', :git => 'git://github.com/ianwhite/resources_controller'
gem 'will_paginate', '3.0.pre' # pagination
gem 'jquery-rails', '>= 0.2.6'
gem "rmagick" # sudo aptitude install libmagick9-dev
gem "paperclip", "~> 2.3"
gem "nested_form", :git => "git://github.com/madebydna/nested_form.git"
gem "meta_search"
gem "hirb"
gem "devise"
gem "rails_admin", :git => "git://github.com/sferik/rails_admin.git"

Wie kann ich dieses Problem beheben?

Amokrane Chentir
quelle
7
Ich denke, das Problem besteht auch bei Rake-0.0.9 (veröffentlicht).
Kedar Mhaswade
4
du meinst Rechen, Version 0.9.0. aber ja, es ist kaputt.
Rob
Ist dies also ein Problem mit etwas, das ich tue, oder ein Problem mit dieser bestimmten Version von Rake? Danke, N
ifightcrime
Muhammad Usman,

Antworten:

119

Ich hatte die gleiche Ausnahme beim Ausführen der Version 0.9.0.beta.4 von Rake. Es sieht aus wie das neueRake::DSL nicht richtig geladen ist.

Also habe ich meinem Rakefile folgenden Code hinzugefügt:

require 'rake'

# Rake Fix Code start
# NOTE: change 'Anelis' to your app's module name (see config/application.rb)
module ::Anelis
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end
# Rake Fix Code end

MyApp::Application.load_tasks

Auf diese Weise konnte ich meine Rake-Aufgaben erneut ausführen.

Ich weiß, dass dies keine elegante Lösung ist. Wenn Sie jedoch die --preVersion von Rake verwenden müssen, ist es möglicherweise in Ordnung, diesen schnellen Hack zu verwenden.

Mordaroso
quelle
Danke mordaroso für den Tipp!
Amokrane Chentir
14
Stellen Sie sicher, dass Sie die Zeile "module :: Anelis" so ändern, dass sie mit dem Namen Ihrer Rails-App übereinstimmt. IE "module :: Myapp" Ich habe das vergessen, und diese Lösung hat nicht funktioniert, bis ich meinen Fehler erkannt habe.
Scott Swezey
1
Danke mordaroso für die tipps. Ändern Sie Anelis in Ihren App-Namen und fügen Sie diesen magischen Code vor der Zeile YourAppName :: Application.load_tasks hinzu, andernfalls tritt der Fehler weiterhin auf
Giang Nguyen
10
Und stellen Sie sicher, dass Sie dies zwischen require 'rake'undMyApp::Application.load_tasks
Jits
Es sieht so aus, als ob dies bis zur vollständigen Version 0.9.0 so geblieben ist. Ich habe Rake in meinem Gemfile.lock auf 0.8.7 zurückgezogen, bis dies in Rails und / oder Rake behoben ist. Die Antwort von Andrei unten scheint dies zu suggerieren.
Sj26
158

Wie in der Antwort von Mordaroso erläutert , gibt es in Rake 0.9.0 ein Problem. Sie müssen Rake vorübergehend herabstufen, um dies zu vermeiden:

  1. run: gem uninstall rake -v 0.9(hinzufügen, sudosofern Sie nicht verwenden rvm)

  2. füge deinem Gemfile hinzu: gem 'rake', '~> 0.8.7'

  3. und dann ausführen: bundle update

Sie können den ersten Schritt überspringen , aber dann müssen Sie laufen rakemit bundle exec, zum Beispiel:

bundle exec rake db:migrate

Andernfalls wird der folgende Fehler angezeigt.

rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

Aktualisieren

Wie Alex Chaffee in einem Kommentar zu Pablo Canteros Antwort bemerkte , müssen Sie möglicherweise Folgendes tun, um Rake zu deinstallieren, wenn das Problem weiterhin auftritt

rvm use @global && gem uninstall rake -v 0.9.0
rvm use @       && gem uninstall rake -v 0.9.0

Versuchen Sie auch die in Dukes Antwort vorgeschlagene Lösung .

Andrei
quelle
2
Ich denke, dies ist die am wenigsten "hackige" Lösung. Möglicherweise müssen Sie Rake ausführen bundle exec rake, um die funktionierende gebündelte Version zu verwenden.
Stuart K
2
@Stuart K, bundle exec rakewird nur benötigt, wenn rake -0.9 nicht deinstalliert wurde. In diesem Fall erhält man eine Fehlermeldungrake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei
1
Dieses Problem tritt auch bei Rails 3.0.7 auf, wobei für das Railties-Juwel Rake> = 0.8.7 erforderlich ist, wodurch 0,9 als verfügbar eingezogen wird ...
Matthew Savage
3
Noch weniger hackig ist zu verwenden:gem 'rake', '~> 0.8.7'
Fábio Batista
Was genau meinst du mit "Zu deiner Gemfile hinzufügen"? Wo ist diese Gemfile? Entschuldigung, n00b Frage
Adnan
40

Hinweis: Dies wurde gerade in Rails 3.0.8 behoben

Die neue Version von Rake legt ihre DSL-Befehle (Task, Datei, Desc, Import usw.) nicht mehr im Stammverzeichnis des Objekt-Namespace ab (das Platzieren in Object bedeutet, dass jedes Objekt einen Task-Befehl hat, der nicht sehr schön ist. Das DSL Befehle sind durch Einmischen der Rake::DSL module in ein beliebiges Modul , das die Befehle benötigt.

Fügen Sie bis zur Aktualisierung von Ruby on Rails für Rake 0.9.x Folgendes in Ihr Projekt-Rakefile nach "Rake erforderlich" und vor dem Aufruf von ein Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end
Herzog
quelle
Ich benutze Rails 3.0.7, mit Rake auf 0.9.0 aktualisiert, aber standardmäßig in Gemfile.lock ist es 0.8.7. Wenn wir also auf 0.9.0 aktualisiert haben, funktioniert es gut, danke Duke
Jagdish Barabari
16

Ich habe für rails_admin ein Problem mit demselben Fehler erstellt.

Die Antwort :

Dies ist ein allgemeines Rails-Problem: http://twitter.com/dhh/status/71966528744071169

Es sollte bald eine Version 3.0.8 geben, die das Problem behebt. In der Zwischenzeit können Sie Ihrer Gemfile folgende Zeile hinzufügen:

Edelstein 'Rechen', '~> 0,8,7'

Es ist ein Problem in Rake (0.9.0), das DHH auf Twitter angekündigt hat .

Rake 0.9, das gestern veröffentlicht wurde, hat Rails (und andere) gebrochen. Während wir auf eine Lösung warten, möchten Sie den Edelstein 'Rechen', '0.8.7' in Ihrer Gemfile.

Pablo Cantero
quelle
2
Dies ist möglicherweise nicht ausreichend, wenn Ihr PATH noch das Verzeichnis / bin von Rake 0.9.0 enthält. Um Rake wirklich zu deinstallieren, müssen Sie dies tun gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(die zweite Installation besteht darin, die ausführbare Datei zurückzubekommen).
AlexChaffee
1
Und wenn Rake 0.9.0 in Ihr rvm globales Gemset gelangt ist, müssen Sie dies tunrvm use @global && gem uninstall rake --version 0.9.0 && rvm use @ && gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7
AlexChaffee
2

Ich benutze rvm, aber die Deinstallation hilft mir nicht. Also entferne ich manuell alle 0.9 Dateien aus dem .rvm/gems/ruby@globalVerzeichnis und alles wird wie zuvor!

MikDiet
quelle
0

Fügen Sie hinzu, ohne Rake 0.9.x deinstallieren zu müssen

Edelstein 'Rechen', '~> 0,8,7'

zu deinem Gemfile und tippe einfach

Bundle Exec Rake -T

Helios
quelle
Beachten Sie, dass 0.9.1 das Problem behoben hat, sodass Sie diese Version verwenden können, anstatt ein Downgrade auf 0.8.7 durchzuführen.
Amokrane Chentir