Неопределенный метод 'task' с использованием Rake 0.9.0 - PullRequest
132 голосов
/ 13 марта 2011

Я только что обновил Rake до последней версии (0.9.0.beta.4), и команда rake заканчивается следующим сообщением об ошибке:

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

Вот след:

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>'

Кто-нибудь испытывал такую ​​же проблему? Что может быть не так? Обратите внимание, что я использую Rails 3.0.3, вас может заинтересовать содержимое моего 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"

Как я могу исправить эту проблему?

Ответы [ 8 ]

158 голосов
/ 21 мая 2011

Как объяснено в ответе mordaroso , в Rake 0.9.0 есть проблема.Вам необходимо временно понизить Rake, чтобы избежать его:

  1. run: gem uninstall rake -v 0.9 (добавьте sudo, если вы не используете rvm)

  2. добавьте в свой Gemfile: gem 'rake', '~> 0.8.7'

  3. и затем выполните: bundle update

Вы можете пропустить первый шаг, нотогда вы должны запустить rake, используя bundle exec, например:

bundle exec rake db:migrate

В противном случае вы получите следующую ошибку.

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

Обновление

As AlexЧаффи заметил в комментарии к ответу Пабло Кантеро , что вам может потребоваться выполнить следующие действия для удаления Rake, если вы все еще видите проблему

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

Также попробуйте решение, предложенное в Ответ герцога .

119 голосов
/ 13 марта 2011

У меня было то же исключение при запуске версии Rake 0.9.0.beta.4. Похоже, что новый Rake::DSL загружен неправильно.

Итак, я добавил следующий код в мой 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

Таким образом, я смог снова запустить свои задачи Rake.

Я знаю, что это не элегантное решение. Но если вам нужно использовать --pre версию Rake, возможно, вам стоит использовать этот быстрый взлом.

39 голосов
/ 24 мая 2011

Примечание: это было просто исправлено в Rails 3.0.8

Новая версия Rake не помещает свои команды DSL (task, file, desc, import и т. Д.) Вкорень пространства имен объекта больше (размещение их в объекте означало, что у каждого объекта есть команда задачи, что не очень приятно. Команды DSL доступны путем смешивания в Rake::DSL module в любом модуле, нуждающемся в командах.

ДоRuby on Rails обновлен для работы с Rake 0.9.x, добавьте следующее в свой проект Rakefile после «require rake» и перед вызовом Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end
16 голосов
/ 23 мая 2011

Я создал проблему для rails_admin по поводу этой же ошибки.

Ответ :

Это общая проблема Rails: http://twitter.com/dhh/status/71966528744071169

Вскоре должен появиться релиз 3.0.8, которыйисправляет это.Тем временем вы можете добавить следующую строку в свой Gemfile:

gem 'rake', '~> 0.8.7'

Это проблема в Rake (0,9.0), он был объявлен DHH в Твиттере.

Рейк 0.9, который был выпущен вчера, сломал Rails (и других).Пока мы ждем исправления, вам понадобится гем 'rake', '0.8.7' в вашем Gemfile.

7 голосов
/ 26 мая 2011

Это было исправлено в Ruby on Rails 3.0.8.rc1 , который должен быть выпущен через несколько дней.

3 голосов
/ 02 июня 2011

Rake 0.9.1 только что выпущен, который отменяет изменение, вызвавшее эту ошибку, но добавляет предупреждение об устаревании: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c

2 голосов
/ 22 мая 2011

Я использую rvm, но удаление мне не помогает.Поэтому я вручную удаляю все файлы 0.9 из каталога .rvm/gems/ruby@global, и все становится как прежде!

0 голосов
/ 07 июня 2011

без необходимости удаления Rake 0.9.x, добавьте

gem 'rake', '~> 0.8.7'

в ваш Gemfile и просто введите

bundle exec rake -T

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...