Método indefinido 'task' usando Rake 0.9.0

132

Acabei de atualizar o Rake para a versão mais recente ( 0.9.0.beta.4) e o rakecomando termina com a seguinte mensagem de erro:

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

Aqui está o rastreio:

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

Alguém experimentou o mesmo problema? O que poderia estar errado? Observe que estou executando Rails 3.0.3, você também pode estar interessado no conteúdo do meu 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"

Como posso resolver este problema?

Amokrane Chentir
fonte
7
Eu acho que o problema existe com o rake-0.0.9 (lançado) também.
Kedar Mhaswade 20/05
4
você quer dizer rake, versão 0.9.0. mas sim, está quebrado.
Rob
então isso é um problema com algo que estou fazendo ou com esta versão específica do rake? Obrigado, N
ifightcrime
deparei com esta questão, bem como, tentando descobrir isso
Muhammad Usman

Respostas:

119

Eu tive a mesma exceção ao executar a versão 0.9.0.beta.4 do Rake. Parece que o novo Rake::DSLnão está carregado corretamente.

Então eu adicionei o seguinte código ao meu 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

Dessa forma, eu pude executar minhas tarefas Rake novamente.

Eu sei que essa não é uma solução elegante. Mas se você precisar usar a --preversão do Rake, pode ser bom usar esse hack rápido.

mordaroso
fonte
Obrigado mordaroso pela dica!
Amokrane Chentir
14
Certifique-se de alterar a linha "module :: Anelis" para o que corresponder ao nome do seu aplicativo rails. IE "module :: Myapp" Esqueci de fazer isso, e essa solução não funcionou até que eu percebi meu erro.
Scott Swezey
1
Obrigado mordaroso pelas dicas. Alterar Anelis para o seu nome do aplicativo e adicionar aqueles código mágico antes do YourAppName linha :: Application.load_tasks caso contrário o erro ainda ocorre
Giang Nguyen
10
E certifique-se de colocar isso entre require 'rake'eMyApp::Application.load_tasks
Jits 20/05
Parece que isso persistiu na versão completa 0.9.0. Eu puxei o rake de volta para 0.8.7 no meu Gemfile.lock até que isso seja corrigido nos trilhos e / ou rake. A resposta abaixo de Andrei parece sugerir isso.
Sj26 23/05
158

Como explicado na resposta de mordaroso , há um problema no Rake 0.9.0. É necessário fazer o downgrade temporário do Rake para evitá-lo:

  1. executar: gem uninstall rake -v 0.9(adicione a sudomenos que você use rvm)

  2. adicione ao seu Gemfile: gem 'rake', '~> 0.8.7'

  3. e então execute: bundle update

Você pode pular a primeira etapa, mas precisará executar rakeusando bundle exec, por exemplo:

bundle exec rake db:migrate

Caso contrário, você receberá o seguinte erro.

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

Atualizar

Como Alex Chaffee notou em um comentário para a resposta de Pablo Cantero , talvez seja necessário fazer o seguinte para desinstalar o Rake, se o problema persistir.

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

Tente também a solução sugerida na resposta de Duke .

Andrei
fonte
2
Eu acho que essa é a solução menos "hacky". Pode ser necessário executar o rake bundle exec rakepara usar a versão empacotada em funcionamento.
Stuart K
2
@Stuart K, bundle exec rakeé necessário apenas se o rake-0.9 não tiver sido desinstalado. Nesse caso, é exibida uma mensagem de erro #rake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei
1
Esse problema também existe com Rails 3.0.7, com a gema Railties exigindo Rake> = 0.8.7, que puxa em 0,9 como seu disponível ...
Matthew Savage
3
Ainda menos hacky é usar:gem 'rake', '~> 0.8.7'
Fábio Batista
Por "adicionar ao seu Gemfile", o que exatamente você quer dizer? Onde fica esse Gemfile? Desculpe, pergunta n00b
Adnan
40

Nota: Isso foi corrigido no Rails 3.0.8

A nova versão do Rake não coloca mais seus comandos DSL (tarefa, arquivo, desc, importação, etc.) na raiz do namespace Object (colocá-los em Object significa que todo objeto tem um comando de tarefa, não muito agradável. comandos estão disponíveis misturando em Rake::DSL modulequalquer módulo que precise dos comandos.

Até que o Ruby on Rails seja atualizado para funcionar com o Rake 0.9.x, coloque o seguinte no seu projeto Rakefile após "exigir rake" e antes da chamada para Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end
Duque
fonte
Estou usando Rails 3.0.7, com ancinho atualizado para 0.9.0, mas por padrão no Gemfile.lock é 0.8.7 assim que se nós atualizado para 0.9.0, funciona bem thanx Duke
Jagdish Barabari
16

Eu criei um problema para o rails_admin sobre esse mesmo erro.

A resposta :

Este é um problema geral do Rails: http://twitter.com/dhh/status/71966528744071169

Deve haver uma versão 3.0.8 em breve que a conserte. Enquanto isso, você pode adicionar a seguinte linha ao seu Gemfile:

gem 'ancinho', '~> 0.8.7'

É um problema no Rake (0.9.0), foi anunciado pelo DHH no Twitter.

O Rake 0.9, lançado ontem, quebrou o Rails (e outros). Enquanto aguardamos uma correção, você vai querer gem 'rake', '0.8.7' no seu Gemfile.

Pablo Cantero
fonte
2
Isso pode não ser suficiente, se o seu PATH ainda tiver o diretório rake 0.9.0's / bin. Para realmente desinstalar o rake, você precisa fazer gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(a segunda instalação é recuperar o executável).
AlexChaffee
1
E se ancinho 0.9.0 tem insto o seu rvm gemset global, você tem que fazerrvm 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

Eu uso o rvm, mas a desinstalação não me ajuda. Então, eu removo manualmente todos os arquivos 0,9 do .rvm/gems/ruby@globaldiretório e tudo se torna como antes!

MikDiet
fonte
0

sem a necessidade de desinstalar o Rake 0.9.x, adicione

gem 'ancinho', '~> 0.8.7'

ao seu Gemfile e apenas digite

pacote exec rake -T

Helios
fonte
Observe que a 0.9.1 corrigiu o problema, para que você possa usar essa versão em vez de fazer o downgrade para 0.8.7.
Amokrane Chentir