Problemas de Ruby on Rails e Rake: Rake constante não inicializado :: DSL

189

Estou tendo um problema realmente frustrante: o Rake está sendo burro.

Veja como o problema ocorre:

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

Ambos funcionam bem, mas quando eu faço isso,

$ rake db:migrate

Estou tendo o erro a seguir.

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

Procurei na Internet por erros semelhantes / mesmos, e as pessoas os tiveram. Apenas ninguém parece resolver o problema!

Como corrijo esse problema?

HRÓÐÓLFR
fonte

Respostas:

193

Um tweet do DHH anteriormente. O Rake .9.0 quebra o Rails e várias outras coisas, você precisa:

gem "rake", "0.8.7"

no seu Gemfile.

Caley Woods
fonte
17
Isso funcionou para mim. Eu precisava fazer bundle update rakeprimeiro. Então eu verifiquei com bundle show rake. Deve dizer 0.8.7. Então rake db:migrate.
B Sete
26
Ou melhor ainda: gem "rake", "!= 0.9.0". Isso evita a versão 0.9.0 quebrada, mas será atualizada para uma versão mais recente assim que uma versão mais recente for publicada (removê-la posteriormente não prejudicará, mas mantê-lo também não deve prejudicar).
Spiralis 24/05
6
@Spiralis Também encontrei o problema com a versão 0.9.2. Portanto, talvez seja necessário adicionar essa linha para algumas versões.
dharmatech
3
esta solução funcionou funciona para mim. Como @dharmatech, eu tenho esse problema heroku rake db:migratee isso parece corrigi-lo. lembre-se de adicionar e confirmar essas alterações no git antes de continuar;)
pruett
1
Isso pode funcionar para o Rails, mas também tive que fazer sudo gem install rakepara garantir que a rakeversão que eu estava chamando na linha de comando não fosse 0.8.7.
Autumnsault 14/03/12
72

Fiz algumas pesquisas logo após a resposta anterior (desculpe, devo fazer antes).

Todos os problemas foram resolvidos com o Rake gem 0.9.2. Segui estas etapas:

  • Eu instalei gem install rake -v=0.9.2(eu tinha a jóia 0.9.1)
  • removeu o 0.9.1 com gem uninstall rake -v=0.9.1
  • atualizado com bundle update
  • então o db:migratemostrou um aviso,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Foi resolvido adicionando o seguinte ao arquivo Rake.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Omiti a module ::RakeFileUtils extend Rake::FileUtilsExtendopção sugerida por @databyte.

Isso significa que o Rake gem 0.9.2 funciona bem!

Arrumaco
fonte
Segui os três primeiros passos e não recebi nenhum aviso, então não me incomodei com o resto, obrigado pela sugestão!
Abe Petrillo
1
Isso me pede para perguntar ... Por que eu deveria invadir o Rake para manter esse recurso? O que o Rake está tentando fazer e o que devo usar agora?
21711 Ryanmt
@Arrumaco, qual é o diretório do arquivo Rake?
Ctak
Ele; s importante notar que a adição à RakeFiledeve ser antes require 'rake'- me pegou fora :)
Ciaran Archer
12
mesmo problema, mas eu já tinha rake (0.9.2, 0.8.7). A reinstalação do 0.9.2 parece corrigir o problema: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.
54

Passando pelo capítulo 2 do Railstutorial (demo_app), encontrei esse problema. Tentei todas as outras respostas listadas aqui, mas não consegui fazê-lo funcionar até que fiz isso:

Coloque isso em seu Rakefile acima e exija 'rake':

require 'rake/dsl_definition'

via Como corrigir o problema constante não inicializado de Rake :: DSL no Heroku?

Também recomendei e enviei todos os arquivos para o Github e Heroku.

djblue2009
fonte
Esta parece ser a melhor resposta, já que a atualização de 0.9.2 para 0.8.7 quebraria algumas dependências de gemas, dependendo de cada caso, como o meu :) Obrigado!
DiegoSalazar
Isso não funciona para mim. Eu recebo "nenhum arquivo desse tipo para carregar - rake / dsl_definition" ao fazer o rake db: create
KMC
25

Tudo que eu precisava fazer era usar:

gem install rake

Eu já tinha a versão 0.9.2, só precisava instalar.

Branstar
fonte
uau funcionou para mim. Mas você poderia explicar por que tenho que instalar o rake enquanto o rake já deve estar lá?
KMC
Ainda não sou um especialista, mas meu entendimento é de que existe uma diferença entre 'instalar' gemas no seu PC e 'instalá-las' em um registro gem - suspeito que seja porque a instalação do Ruby precisa saber quais gemas são onde no seu PC. Talvez isso é algo que poderia ser automatizado no futuro, ou já está automatizado em determinadas distribuições de Ruby ...
Branstar
19

Reinstale o gem rake e ele deve funcionar bem:

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

Caso contrário, especifique a versão '0.8.7' no seu Gemfile.

Hohner
fonte
essa abordagem funcionou para mim e eu preferia não ter que rebaixar a versão ..
Tarnschaf
Trabalhou para mim, bem como, apenas para ancinho -v 0.9.2.2
Haspemulator
10

Se não estiver usando o Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Em seguida, escolha desinstalar o 0.9.0.

Travis Reeder
fonte
isso corrigiu para mim sem o bundler (trilhos 2.3.8). Tentou instalar o rake 0.9.2, mas isso não foi corrigido. Instalar o 0.8.7 e desinstalar o 0.9.2 foi o que finalmente funcionou para mim.
Michael Durrant
8

Se como eu, você está preso no rake 0.8.7 e está usando o Rails 3.2.x, o railties adiciona um requisito para o Rake :: DSL

Para resolver isso, no topo do seu Rakefile você deve adicionar:

module Rake
  module DSL
  end
end
Jonathon Horsman
fonte
7

Resolvi o mesmo problema com as seguintes etapas:

No Gemfile:

gem 'rake', '0.9.2'

Em seguida, execute isso no console:

sudo bundle update rake

Em seguida, adicionou as seguintes linhas ao Rakefile:

require 'rake/dsl_definition'
include Rake::DSL
Gaurav Gupta
fonte
4

Eu tive o mesmo problema e tive que usar a rake 0.8.7 gem em vez de 0.9.0.

Paulo
fonte
4

Eu sou um usuário do Windows XP e tive o mesmo problema.

Digitei gem "rake", "0.8.7" no gemfile e digitei o seguinte na janela de comando.

bundle update rake

Isso resolveu o meu problema.

Mr. Beginner
fonte
trabalhou para mim também, a partir de hoje. apenas tentando codificar trilhos no Win7.
arscariosus
4
  1. Vá para o caminho do seu projeto
  2. Tipo bundle install --path=vendor/bundle
  3. Tipo bundle exec rake db:migrate

Para iniciar o tipo de servidor bundle exec rails s. Use o bundle exec e você terá certeza de usar as gemas corretas (versão necessária) para o seu projeto. Também eu recomendo que você adicione vendor/bundlea .gitignorese utilizar gite fazer alias para bundle exec. Se você usar, zshpode seguir esta abordagem

ka8725
fonte
3

O mesmo que Branstar acima - obrigado Branstar!

  • SO: Windows Vista
  • Nível: completamente novo no Ruby on Rails
  • Eu já tinha o Ruby 1.9.2 instalado

Eu segui as instruções em Executando o Rails 3 no Windows .

Tudo funcionou até a parte "rake db: migrate", que me deu a mesma saída que a postagem original.

Eu corri:

gem install rake

Eu corri novamente:

rake db:migrate

Pude iniciar o servidor Ruby on Rails e colocar tudo no lugar.

Mais uma vez obrigado Branstar :-)

zimini
fonte
2

Eu sinto por você (mikhailvs), é realmente frustrante. Estou enlouquecendo há quase um dia inteiro. Até desinstalei o Ruby e todos os seus arquivos dependentes e desliguei o meu PC, mas ainda tenho o mesmo problema.

O que recebi da mensagem de erro é o problema com o Rake 0.9.2. Parece que não foi totalmente instalado. Então eu tive que reinstalargem install rake -v=0.9.2

Eu não tinha certeza se tenho o rake –v0.9.1 instalado. Então, para ter certeza de que estou seguro, tentei remover essa versão antiga gem uninstall rake -v=0.9.1. Mas é me mostrado a mensagem de erro

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

OK, verifiquei todos os diretórios Rake no meu PC e descobri que só tinha o Rake 0.9.2. Então, para verificar se tudo correu bem, eu migrei com rake db:migrate. E funcionou :)

Eu acho que não tinha o Rake 0.9.1 porque eu instalei o Ruby ( rubyinstaller-1.9.2-p180 - no meu sistema Windows 7) e todas as jóias também. Enquanto isso, o Rake 0.9.2 não estava totalmente instalado.

egyamado
fonte
2

A desinstalação com o "gem uninstall rake" funcionou para mim, eu tinha 2 versões instaladas, então fiz uma reinstalação limpa.

"rake db: create" , para garantir que o banco de dados exista e, em seguida, "rake db: migrate" para selar o acordo.

Christopher
fonte
2

Eu tive o mesmo problema usando o Rake 0.9.2.2. Resolvi esse problema usando o bundle exec.

Sean Kibler
fonte
0

Instale o rake 0.8.7 e desinstale o 0.9.2.2

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

Agora usa

$ bundle exec rake db:migrate

Eu acho que isso vai te ajudar ;)

Anuj
fonte
0

Corre

bundle exec rake db:migrate

funciona para mim.

JakeGould
fonte