Metodo 'task' non definito usando Rake 0.9.0


132

Ho appena aggiornato Rake all'ultima versione ( 0.9.0.beta.4) e il rakecomando termina con il seguente messaggio di errore:

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

Ecco la traccia:

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

Qualcuno ha riscontrato lo stesso problema? Cosa potrebbe essere sbagliato? Nota che sto correndo Rails 3.0.3, potresti anche essere interessato al contenuto del mio 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"

Come posso risolvere questo problema?


7
Penso che il problema esista anche con rake-0.0.9 (rilasciato).
Kedar Mhaswade,

4
intendi rake, versione 0.9.0. ma sì, è rotto.
Rob,

quindi questo è un problema con qualcosa che sto facendo o un problema con questa particolare versione di rake? Grazie, N
ifightcrime,

ho appena riscontrato questo problema, cercando di capirlo
Muhammad Usman,

Risposte:


119

Ho avuto la stessa eccezione durante l'esecuzione della versione 0.9.0.beta.4 di Rake. Sembra che il nuovo Rake::DSLnon sia caricato correttamente.

Quindi ho aggiunto il seguente codice al mio 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

In questo modo sono stato in grado di eseguire nuovamente le mie attività Rake.

So che questa non è una soluzione elegante. Ma se devi usare la --preversione di Rake potrebbe essere giusto usare questo hack rapido.


Grazie mordaroso per l'informazione!
Amokrane Chentir,

14
Assicurati di cambiare la linea "module :: Anelis" con qualsiasi cosa corrisponda al nome della tua app rails .. IE "module :: Myapp" Ho dimenticato di farlo, e questa soluzione non ha funzionato fino a quando ho capito il mio errore.
Scott Swezey,

1
Grazie mordaroso per i suggerimenti. Cambia Anelis nel nome della tua app e aggiungi quel codice magico prima della riga YourAppName :: Application.load_tasks altrimenti l'errore si verifica ancora
Giang Nguyen

10
E assicurati di metterlo tra require 'rake'eMyApp::Application.load_tasks
Jits,

Sembra che questo sia persistito nella versione completa 0.9.0. Ho portato il rake a 0.8.7 nel mio Gemfile.lock fino a quando questo non è stato risolto in rails e / o rake. La risposta qui sotto di Andrei sembra suggerire questo.
sj26

158

Come spiegato nella risposta di mordaroso , c'è un problema in Rake 0.9.0. È necessario eseguire il downgrade temporaneo di Rake per evitarlo:

  1. run: gem uninstall rake -v 0.9(aggiungi a sudomeno che tu non usi rvm)

  2. aggiungi al tuo Gemfile: gem 'rake', '~> 0.8.7'

  3. e poi esegui: bundle update

È possibile saltare il primo passaggio, ma è necessario eseguire rakeutilizzando bundle exec, ad esempio:

bundle exec rake db:migrate

Altrimenti viene visualizzato il seguente errore.

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

Aggiornare

Come ha notato Alex Chaffee in un commento per la risposta di Pablo Cantero , potrebbe essere necessario eseguire le seguenti operazioni per disinstallare Rake se il problema persiste ancora

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

Prova anche la soluzione suggerita nella risposta di Duke .


2
Penso che questa sia la soluzione meno "confusa". Potrebbe essere necessario eseguire rake bundle exec rakeper utilizzare la versione in bundle funzionante.
Stuart K,

2
@Stuart K, bundle exec rakeè necessario solo se rake-0.9 non è stato disinstallato. In questo caso si riceve un messaggio di errorerake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei,

1
Questo problema esiste anche con Rails 3.0.7, con la gemma Railties che richiede Rake> = 0.8.7, che arriva a 0.9 come disponibile ...
Matthew Savage,

3
Ancora meno confuso è usare:gem 'rake', '~> 0.8.7'
Fábio Batista

Con "aggiungi al tuo Gemfile", cosa intendi esattamente? Dov'è questo Gemfile? Siamo spiacenti, domanda n00b
Adnan,

40

Nota: questo è stato appena risolto in Rails 3.0.8

La nuova versione di Rake non inserisce più i suoi comandi DSL (task, file, desc, import, ecc.) Nella radice dello spazio dei nomi Object (posizionandoli in Object significa che ogni oggetto ha un comando task, non molto carino. i comandi sono disponibili mescolando Rake::DSL modulein qualsiasi modulo che necessita dei comandi.

Fino a quando Ruby on Rails non viene aggiornato per funzionare con Rake 0.9.x, inserisci quanto segue nel tuo progetto Rakefile dopo "richiedi rake" e prima della chiamata a Application.load_tasks:

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

Sto usando Rails 3.0.7, con rake aggiornato alla 0.9.0 ma per impostazione predefinita in Gemfile.lock è 0.8.7 quindi se abbiamo aggiornato alla 0.9.0 funziona bene grazie Duke
Jagdish Barabari

16

Ho creato un problema per rails_admin su questo stesso errore.

La risposta :

Questo è un problema generale di Rails: http://twitter.com/dhh/status/71966528744071169

Dovrebbe esserci presto una versione 3.0.8 che la risolve. Nel frattempo, puoi aggiungere la seguente riga al tuo Gemfile:

gemma "rastrello", "~> 0.8.7"

È un problema in Rake (0.9.0), è stato annunciato da DHH su Twitter.

Rake 0.9, che è stato rilasciato ieri, ha rotto Rails (e altri). Mentre aspettiamo una correzione, vorrai 'rake' gem, '0.8.7' nel tuo Gemfile.


2
Questo potrebbe non essere sufficiente, se il PATH ha ancora la directory / bin di rake 0.9.0 su di esso. Per disinstallare veramente il rake, devi farlo gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(la seconda installazione è di recuperare l'eseguibile).
AlexChaffee,

1
E se il rake 0.9.0 è entrato nel tuo gemset globale rvm, devi farlorvm 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

Uso rvm, ma la disinstallazione non mi aiuta. Quindi rimuovo manualmente tutti i file 0.9 dalla .rvm/gems/ruby@globaldirectory e tutto diventa come prima!


0

senza la necessità di disinstallare Rake 0.9.x, aggiungere

gemma "rastrello", "~> 0.8.7"

al tuo Gemfile e basta digitare

pacchetto exec rake -T


Si noti che 0.9.1 ha risolto il problema, quindi è possibile utilizzare quella versione invece di eseguire il downgrade a 0.8.7.
Amokrane Chentir,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.