Problemi di Ruby on Rails e Rake: Rake costante non inizializzato :: DSL


189

Sto avendo un problema davvero frustrante: Rake è stupido.

Ecco come si presenta il problema:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

Entrambi funzionano bene, ma quando lo faccio,

$ rake db:migrate

Ottengo il seguente errore.

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

Ho cercato su Internet errori simili / uguali e le persone li hanno avuti. Solo nessuno sembra mai risolvere il problema!

Come posso risolvere questo problema?

Risposte:


193

Un tweet di DHH prima. Rake .9.0 rompe Rails e molte altre cose, devi:

gem "rake", "0.8.7"

nel tuo Gemfile.


17
Questo ha funzionato per me. bundle update rakePrima dovevo farlo . Poi ho verificato con bundle show rake. Dovrebbe essere indicato 0.8.7. Poi rake db:migrate.
B Sette

26
O ancora meglio: gem "rake", "!= 0.9.0". Questo evita la versione 0.9.0 non funzionante, ma si aggiorna alla versione più recente una volta pubblicata una versione più recente (rimuoverla in seguito non farà male, ma tenerla non dovrebbe fare male).
Spiralis,

6
@Spiralis Ho anche riscontrato il problema con la versione 0.9.2. Quindi potresti dover aggiungere quella riga per alcune versioni.
Dharmatech,

3
questa soluzione ha funzionato per me. Come @dharmatech, ho riscontrato questo problema heroku rake db:migratee questo sembrava risolverlo. ricordati di aggiungere e confermare queste modifiche in git prima di procedere;)
pruett,

1
Questo potrebbe funzionare per Rails, ma ho anche dovuto fare sudo gem install rakein modo che la rakeversione che stavo chiamando dalla riga di comando non fosse 0.8.7.
Autumnsault,

72

Ho fatto qualche ricerca subito dopo la mia risposta precedente (scusate, devo fare prima).

Tutti i problemi sono risolti con Rake gem 0.9.2 .. Ho seguito questi passaggi:

  • Ho installato gem install rake -v=0.9.2(avevo la gemma 0.9.1)
  • rimosso 0.9.1 con gem uninstall rake -v=0.9.1
  • aggiornato con bundle update
  • poi il db:migratemostrò un avvertimento,WARNING: Global access to Rake DSL methods is deprecated. Please....

    È stato risolto aggiungendo quanto segue al file Rake.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Ho scelto l' module ::RakeFileUtils extend Rake::FileUtilsExtendopzione suggerita da @databyte.

Significa che la gemma Rake 0.9.2 funziona bene!


Ho seguito i primi tre passaggi e non ho ricevuto alcun avviso, quindi non mi sono preoccupato del resto, grazie per il suggerimento!
Abe Petrillo,

1
Questo mi chiede di chiedere ... Perché dovrei hackerare Rake per conservare quella funzione? Cosa sta cercando di fare Rake e cosa dovrei usare ora?
Ryanmt,

@Arrumaco, Qual è la directory per il file Rake?
Ctak,

Vale la pena notare che l'aggiunta al RakeFiledovrebbe essere prima require 'rake'- mi ha sorpreso :)
Ciaran Archer

12
stesso problema, ma avevo già il rake (0.9.2, 0.8.7). Reinstallare 0.9.2 sembra risolvere il problema però: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

Passando attraverso il capitolo 2 di Railstutorial (demo_app) e ho riscontrato questo problema. Ho provato tutte le altre risposte elencate qui, ma non sono riuscito a farlo funzionare fino a quando non ho fatto questo:

Metti questo nel tuo Rakefile sopra richiedi 'rake':

require 'rake/dsl_definition'

via Come risolvere il problema Rake :: DSL costante non inizializzato su Heroku?

Ho anche raccomandato e trasferito tutti i file su Github e Heroku.


Questa sembra la risposta migliore dal momento che il downgrade da 0.9.2 a 0.8.7 spezzerebbe alcune dipendenze di gemme a seconda dei casi, come il mio :) Grazie!
DiegoSalazar,

Non funziona per me. Ottengo "nessun file da caricare - rake / dsl_definition" quando eseguo rake db: create
KMC

25

Tutto quello che dovevo fare era usare:

gem install rake

Avevo già la versione 0.9.2, avevo solo bisogno di installazione.


wow ha funzionato per me. Ma potresti spiegare perché devo installare rake mentre rake dovrebbe essere già lì?
KMC

Non sono ancora un esperto, ma la mia comprensione è che c'è una differenza tra "installare" le gemme sul tuo PC e "installarle" in un registro delle gemme - sospetto che ciò sia dovuto al fatto che l'installazione di Ruby deve sapere quali gemme sono dove sul tuo PC. Forse questo è qualcosa che potrebbe essere automatizzato in futuro, o è già automatizzato in alcune distribuzioni di Ruby ...
Branstar,

19

Reinstallare la gemma rastrello e dovrebbe funzionare bene:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

In caso contrario, specifica la versione '0.8.7' nel tuo Gemfile.


questo approccio ha funzionato per me e ho preferito non dover effettuare il downgrade della versione ..
Tarnschaf,

Ha funzionato anche per me, solo per il rake -v 0.9.2.2
Haspemulator

10

Se non si utilizza Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Quindi scegliere di disinstallare 0.9.0.


questo risolto per me senza bundler (rotaie 2.3.8). Aveva tentato di installare rake 0.9.2 ma non è stato risolto. Installare 0.8.7 e disinstallare 0.9.2 è stato quello che alla fine ha funzionato per me.
Michael Durrant,

8

Se come me sei bloccato sul rake 0.8.7 e stai usando Rails 3.2.x, Railties aggiunge un requisito per Rake :: DSL

Per risolvere questo problema, in cima al tuo Rakefile dovresti aggiungere:

module Rake
  module DSL
  end
end

7

Ho risolto lo stesso problema con i seguenti passaggi:

Nel Gemfile:

gem 'rake', '0.9.2'

Quindi eseguito questo sulla console:

sudo bundle update rake

Quindi ha aggiunto le seguenti righe a Rakefile:

require 'rake/dsl_definition'
include Rake::DSL


4

Ho avuto lo stesso problema e ho dovuto usare la gemma rake 0.8.7 invece di 0.9.0.


4

Sono un utente di Windows XP e ho avuto lo stesso problema.

Ho inserito gem "rake", "0.8.7" nel file gem, e quindi ho digitato quanto segue dalla finestra di comando.

bundle update rake

Questo risolto il mio problema.


ha funzionato anche per me, ad oggi. sto solo cercando di codificare i binari su Win7.
arscariosus,

4
  1. Vai al percorso del tuo progetto
  2. genere bundle install --path=vendor/bundle
  3. genere bundle exec rake db:migrate

Per avviare il tipo di server bundle exec rails s. Usa bundle exec e sarai sicuro di usare le gemme giuste (versione richiesta) per il tuo progetto. Inoltre vi consiglio di aggiungere vendor/bundlea .gitignorese si utilizza gite fare alias bundle exec. Se lo usi zshpuoi seguire questo approccio


3

Come sopra Branstar - grazie Branstar!

  • Sistema operativo: Windows Vista
  • Livello: completamente nuovo per Ruby on Rails
  • Avevo già installato Ruby 1.9.2

Ho seguito le istruzioni in Running Rails 3 su Windows .

Tutto ha funzionato fino alla parte "rake db: migrate" che mi ha dato lo stesso output del post originale.

Ho corso:

gem install rake

Corsi di nuovo:

rake db:migrate

Quindi sono stato in grado di avviare il server Ruby on Rails e avevo tutto a posto.

Grazie ancora Branstar :-)


2

Mi sento per te (Mikhailv), è davvero frustrante. Sono impazzito da quasi un giorno intero. Ho anche disinstallato Ruby e tutti i suoi file dipendenti e ho spento il mio PC, ma ho ancora lo stesso problema.

Quello che ho ricevuto dal messaggio di errore è il problema con Rake 0.9.2. Sembra che non sia stato completamente installato. Quindi ho dovuto reinstallaregem install rake -v=0.9.2

Non ero sicuro di aver installato rake –v0.9.1. Quindi, per essere sicuro di essere al sicuro, ho provato a rimuovere quella vecchia versione con gem uninstall rake -v=0.9.1. Ma mi viene mostrato il messaggio di errore

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

OK, quindi ho controllato tutte le directory Rake sul mio PC e ho scoperto che avevo solo Rake 0.9.2. Quindi per verificare se tutto è andato bene, sono migrato con rake db:migrate. E ha funzionato :)

Penso di non avere Rake 0.9.1 perché ho installato Ruby ( rubyinstaller-1.9.2-p180 - sul mio sistema Windows 7) e tutte le gemme. Nel frattempo Rake 0.9.2 non è stato completamente installato.


2

La disinstallazione con "gem uninstall rake" ha funzionato per me, avevo 2 versioni installate, quindi ho fatto una reinstallazione pulita.

"rake db: create" , per assicurarsi che il database esista e quindi "rake db: migrate" per sigillare l'affare.


2

Ho avuto lo stesso problema usando Rake 0.9.2.2. Ho risolto questo problema usando bund bund exec.



0

Installa rake 0.8.7 e disinstalla 0.9.2.2

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

Adesso usa

$ bundle exec rake db:migrate

penso che questo ti aiuterà;)


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.