Undefined метод "задача" с использованием Rake 0.9.0
Я только что обновил 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"
Как я могу исправить эту проблему?
Ответы
Ответ 1
У меня было то же исключение при запуске версии Rake 0.9.0.b.4.
Похоже, что новый Rake::DSL
не загружен должным образом.
Итак, я добавил следующий код в свой Rakefile:
require 'rake'
# Rake Fix Code start
# NOTE: change 'Anelis' to your app 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
, возможно, это будет правильно использовать этот быстрый хак.
Ответ 2
Как объяснено в mordaroso answer, в Rake 0.9.0 есть проблема. Вам необходимо временно понизить рейтинг Rake, чтобы избежать этого:
-
run: gem uninstall rake -v 0.9
(добавить sudo
, если вы не используете rvm
)
-
добавить в свой Gemfile: gem 'rake', '~> 0.8.7'
-
а затем запустите: 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.
Update
Как заметил Алекс Чаффи в комментарии для Pablo Cantero, вам может понадобиться сделать следующее, чтобы удалить Rake, если вы все еще видите проблему
rvm use @global && gem uninstall rake -v 0.9.0
rvm use @ && gem uninstall rake -v 0.9.0
Также попробуйте решение, предложенное в Duke answer.
Ответ 3
Примечание. Это было исправлено в Rails 3.0.8
Новая версия Rake больше не помещает свои DSL-команды (задача, файл, desc, import и т.д.) в корневое пространство имен объектов (размещение их в Object означает, что у каждого объекта есть команда задачи, не очень приятная. Команды 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
Ответ 4
Я создал проблему для rails_admin об этой же ошибке.
Ответ:
Это общая проблема Rails: http://twitter.com/dhh/status/71966528744071169
В скором времени должна быть выпущена версия 3.0.8, которая исправляет ее. В то же время вы можете добавить следующую строку в свой Gemfile:
gem 'rake', '~ > 0.8.7'
Это проблема в Rake (0.9.0), она была объявлена DHH на Twitter.
Рейк 0.9, который был выпущен вчера, сломал Rails (и другие). Пока мы ждем исправления, вам понадобится gem "rake", "0.8.7" в вашем Gemfile.
Ответ 5
Это было исправлено в Ruby on Rails 3.0.8.rc1, который должен быть выпущен через несколько дней.
Ответ 6
Только что выпущен Rake 0.9.1, который отменяет изменение, вызвавшее эту ошибку, но добавляет предупреждение об отказе: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c
Ответ 7
Я использую rvm, но удаление не помогает мне. Поэтому я вручную удаляю все файлы 0.9 из каталога .rvm/gems/[email protected]
, и все становится как раньше!
Ответ 8
без необходимости удаления Rake 0.9.x, добавьте
gem 'rake', '~ > 0.8.7'
в свой Gemfile и просто введите
bundle exec rake -T