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?

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.


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!


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.


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.


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.


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.


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

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


4

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


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.


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


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 :-)


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.


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.


2

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



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 ;)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.