Undefined method 'task' using Rake 0.9.0

Właśnie zaktualizowałem Rake do najnowszej wersji (0.9.0.beta.4) i polecenie rake Kończy się następującym komunikatem o błędzie:

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

Oto ślad:

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>'
Ktoś doświadczył tego samego problemu? Co może być nie tak? Zauważ, że biegnę Rails 3.0.3, możesz być również zainteresowany zawartością mojego 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"

Jak mogę rozwiązać ten problem?

Author: Peter Mortensen, 2011-03-13

8 answers

Miałem ten sam wyjątek podczas uruchamiania 0.9.0.beta.4 wersja Grabi. Wygląda na to, że nowa Rake::DSL nie jest poprawnie załadowana.

Więc dodałem następujący kod do mojego Rakefile:

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

W ten sposób byłem w stanie uruchomić Moje zadania Grabie ponownie.

Wiem, że to nie jest eleganckie rozwiązanie. Ale jeśli musisz użyć --pre Wersja Rake może być w porządku, aby użyć tego szybkiego hack.
 119
Author: mordaroso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-31 13:34:16

Jak wyjaśniono w odpowiedzi mordaroso , w Rake 0.9.0 występuje problem. Musisz tymczasowo obniżyć Rake, aby go uniknąć:

  1. Run: gem uninstall rake -v 0.9 (add sudo unless you use rvm)

  2. Dodaj do swojego Gemfile: gem 'rake', '~> 0.8.7'

  3. And then run: bundle update

Możesz pominąć pierwszy krok, ale potem musisz uruchomić rake używając bundle exec, na przykład:

bundle exec rake db:migrate

W Przeciwnym Razie otrzymujesz następujące błąd.

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

Update

Jak zauważył Alex Chaffee w komentarzu do odpowiedzi Pabla Cantero , może być konieczne wykonanie następujących czynności, aby odinstalować Rake, jeśli nadal widzisz problem

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

Wypróbuj również rozwiązanie zaproponowane w odpowiedź Duke ' a .

 158
Author: Andrei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:07

Uwaga: zostało to naprawione w Rails 3.0.8

Nowa wersja Rake nie umieszcza swoich poleceń DSL (zadanie, plik, desc, import, itp.) w katalogu głównym przestrzeni nazw obiektu (umieszczenie ich w obiekcie oznaczało, że każdy obiekt ma polecenie task, niezbyt miłe. Polecenia DSL są dostępne przez zmieszanie w Rake::DSL module do dowolnego modułu wymagającego tych poleceń.

Dopóki Ruby on Rails nie zostanie zaktualizowany do pracy z Rake 0.9.x, umieść w swoim projekcie Rakefile po " wymagaj grabie" i przed wywołaniem do Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end
 40
Author: Duke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-31 13:55:19

Utworzyłem problem dla rails_admin o tym samym błędzie.

Odpowiedź :

To jest ogólny problem z Railami: http://twitter.com/dhh/status/71966528744071169

Wkrótce powinno być wydanie 3.0.8, które to naprawia. W międzyczasie możesz dodać następującą linię do pliku Gemfile:

Gem 'rake', '~> 0.8.7'

To problem w Rake (0.9.0), został ogłoszony przez DHH na Twitterze.

Rake 0.9, który został wydany wczoraj, złamał Rails (i inne). Podczas gdy czekamy na poprawkę, będziesz chciał gem 'rake', '0.8.7' w swoim Gemfile.

 16
Author: Pablo Cantero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-05 22:07:00

Zostało to naprawione w Ruby on Rails 3.0.8.rc1 , który powinien zostać wydany w ciągu kilku dni.

 7
Author: Andrew Nesbitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-31 13:56:04

Właśnie została wydana wersja Rake 0.9.1, która odwraca zmianę, która spowodowała ten błąd, ale dodaje ostrzeżenie o wycofaniu: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c

 3
Author: Andrew Nesbitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 04:51:43

Używam rvm, ale odinstalowanie mi nie pomaga. Więc ręcznie usuwam wszystkie pliki 0.9 z katalogu .rvm/gems/ruby@global i wszystko staje się jak wcześniej!

 2
Author: MikDiet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-22 08:39:52

Bez konieczności odinstalowywania Rake 0.9.x, add

Gem 'rake', '~> 0.8.7'

Do swojego Gemfile i po prostu wpisz

Bundle exec rake-T

 0
Author: Helios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 22:35:50