Не визначений метод 'завдання' за допомогою Rake 0.9.0


132

Щойно я оновив 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"

Як я можу виправити цю проблему?


7
Я думаю, що проблема існує і з рейкою-0,0.9 (випущена).
Кедар Массваде

4
ви маєте на увазі граблі, версія 0.9.0. але, так, це зламано.
Роб

так це проблема з чимось, що я роблю, або проблема з цією конкретною версією граблі? Дякую, N
ifightcrime

щойно натрапив на це питання, намагаючись розібратися
Мухаммед Усман

Відповіді:


119

У мене був такий самий виняток, коли запускався версія 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, можливо, скористатися цим швидким злому.


Дякую мордарозо за пораду!
Амокран Чентір

14
Переконайтесь, що ви змінили рядок "модуль :: Anelis" на те, що відповідає назві вашого рельсового додатка. IE "модуль :: Myapp" Я забув це зробити, і це рішення не працювало, поки я не зрозумів свою помилку.
Скотт Сувей

1
Дякую мордарозо за поради. Змініть Anelis у назві програми та додайте цей магічний код перед рядком YourAppName :: Application.load_tasks, інакше помилка все-таки виникає
Giang Nguyen

10
І переконайтесь, що ви поставите це між require 'rake'іMyApp::Application.load_tasks
Джитс

Схоже, це зберігається і до повного випуску 0.9.0. Я повернув рейку до 0,8,7 у своєму Gemfile.lock, поки це не зафіксовано в рейках та / або рейках. Відповідно до цього, начебто, підказує Андрій.
sj26

158

Як пояснено у відповіді мордарозу , в Rake 0.9.0 є проблема. Вам потрібно тимчасово знизити рейку, щоб уникнути цього:

  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.

Оновлення

Як зауважив Алекс Чафі в коментарі до відповіді Пабло Кантеро , вам може знадобитися виконати наступне, щоб видалити Rake, якщо ви все ще бачите проблему

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

Спробуйте також рішення, запропоноване у відповіді герцога .


2
Я думаю, що це найменш "хакітне" рішення. Можливо, вам доведеться запустити рейки bundle exec rakeдля використання робочої версії в комплекті.
Стюарт К

2
@Stuart K, bundle exec rakeпотрібен лише в тому випадку, якщо рейк-0,9 не було видалено. У цьому випадку надходить повідомлення про помилкуrake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Андрій

1
Цей випуск також існує у Rails 3.0.7, тому що дорогоцінний камінь Railties вимагає Rake> = 0.8.7, який набирає 0,9, як його доступно ...
Matthew Savage

3
Ще менш гакітним є використання:gem 'rake', '~> 0.8.7'
Фабіо Батіста

Під "додати до вашого Gemfile", що саме ви маєте на увазі? Де цей Gemfile? Вибачте, питання n00b
Аднан

40

Примітка. Це було виправлено лише в Rails 3.0.8

Нова версія Rake більше не ставить свої команди DSL (завдання, файл, desc, імпорт тощо) у корені простору імен Object (розміщення їх у Object означало, що кожен об'єкт має команду завдання, не дуже приємно. DSL команди доступні шляхом змішування в Rake::DSL moduleбудь-який модуль, який потребує цих команд.

Поки Ruby on Rails не буде оновлено для роботи з Rake 0.9.x, введіть у свій проект Rakefile після "вимагати граблі" та перед викликом Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end

Я використовую Rails 3.0.7, а рейка оновлена ​​до 0.9.0, але за замовчуванням у Gemfile.lock вона становить 0.8.7, тож якщо ми оновили до 0.9.0, це буде чудово, ніж герцог
Jagdish Barabari

16

Я створив проблему для rails_admin про цю ж помилку.

Відповідь :

Це загальна проблема Rails: http://twitter.com/dhh/status/71966528744071169

Незабаром має з’явитися версія 3.0.8, яка виправляє його. Тим часом ви можете додати наступний рядок у свій Gemfile:

gem 'граблі', '~> 0.8.7'

Це проблема в Rake (0.9.0), про це повідомив DHH у Twitter.

Rake 0.9, який був випущений вчора, зламав Rails (та інші). Поки ми чекаємо виправлення, ви захочете дорогоцінний камінь "граблі", "0.8.7" у вашому Gemfile.


2
Це може бути недостатньо, якщо ваш PATH все ще має в ньому каталог граблі 0,9.0 / bin. Щоб дійсно видалити граблі, вам потрібно зробити gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(друга установка - повернути виконуваний файл).
AlexChaffee

1
І якщо рейк 0.9.0 потрапив у ваш глобальний дорогоцінний набір rvm, вам доведеться це зробитиrvm 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

Я використовую rvm, але видалення не допомагає мені. Тож я вручну видаляю всі 0,9 файлів з .rvm/gems/ruby@globalкаталогу і все стає як раніше!


0

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

gem 'граблі', '~> 0.8.7'

до вашого Gemfile і просто введіть

пачка exec граблі -T


Зауважте, що помилка 0,9.1 виправлена, тож ви можете використовувати цю версію замість того, щоб зменшити її до 0.8.7
Amokrane Chentir
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.