O acesso global aos métodos Rake DSL está obsoleto

86

Estou trabalhando no livro do tutorial do Ruby on Rails 3 e digitei o seguinte na linha de comando:

rake db:migrate

que produziu o seguinte aviso.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Não tenho certeza do que fazer ou como lidar com isso. Não conheço nenhum outro comando para Rake.

Como posso resolver este problema?

chell
fonte

Respostas:

64

Eu encontrei isso na questão do Stack Overflow Ruby on Rails e problemas com Rake: constante não inicializada Rake :: DSL . Refere-se a um tweet @DHH.

Coloque o seguinte em seu Gemfile

gem "rake", "0.8.7"

Você pode ver algo como

rake aborted!
You have already activated Rake 0.9.1 ...

Eu ainda tinha uma cópia do Rake 0.9.1 em meu diretório, então a apaguei.

Você pode "excluir" o Rake 0.9.1 executando o seguinte comando:

gem uninstall rake -v=0.9.1

Se você tiver várias versões do gem instaladas, será solicitado que você escolha uma versão.

Depois que 0.9.1 foi limpo, eu corri

bundle update rake

e finalmente consegui criar meus arquivos de banco de dados. Eu estava usando rake db:create, mas deve funcionar rake db:migratetambém.

Espero que ajude.

Brian Bruijn
fonte
5
Isso não funcionou para mim. Tive que remover o rake 0.9.1> gem uninstall rake -v = 0.9.1 e, em seguida,> bundle update Obrigado Antonio
1
Eu concordo com o Antonio - quando eu disse para remover o rake 0.9.1 eu quis dizer usando gem uninstall rake -v=0.9.1. Meu erro por não deixar isso claro. Obrigado pelo esclarecimento Antonio! Saúde, Brian
Brian Bruijn
13
Não acho bom usar deliberadamente bibliotecas antigas, quando novas podem funcionar, veja o comentário abaixo.
Smar de
2
A solução mais simples é a sugerida pela NPatel abaixo. Basta adicionar uma linha ao Rakefile.
Slobodan Kovacevic
Não tive sorte com esta resolução. Ele ainda apresentava o mesmo erro após desinstalar o rake 0.9.1 ou 0.9.2 e, em seguida, executar a atualização do pacote.
Marc
111

Adicionar include Rake::DSLao Rakefile antes de os aplicativos load_tasks serem chamados também funcionou para mim.

Portanto, no caso do usuário acima antes do DemoApp::Application.load_tasksno Rakefile.

Patelify
fonte
Obrigado. Corrigido meu "AVISO: o acesso global aos métodos Rake DSL está obsoleto." problema.
Slobodan Kovacevic
Esta é a maneira correta de corrigir o problema?
Marc
2
@Marc, atualmente esta é a única correção que conheço sem atualizar para o rails 3.0.8 ou superior. Este problema foi resolvido nessa versão: github.com/rails/rails/commit/… . Se você encontrar uma solução melhor, por favor me avise. Além disso, de acordo com o aviso, acho que é a correção adequada.
Patelify
1
Esta é a solução que escolhi. Eu prefiro simplesmente adicionar a linha do que jogar com qual versão do Rake funciona com qual.
Jaydel de
2
Isso funcionou para mim com 1.9.2 e Rails 3.0.7 com Rake 0.9.2
Steven Chanin
5

Eu estava tendo o mesmo problema no Windows com o instalador. Ruby 1.9.2 e Rails 3.0.9. Aqui está o que eu fiz:

bundle update rake
bundle show rake

Depois de fazer isso, estava executando o rake 0.9.2.

Em seguida, atualizei o Rakefile na pasta raiz do aplicativo da seguinte maneira:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

Conforme observado no comentário, certifique-se de que o nome do seu aplicativo esteja correto nas duas linhas apropriadas acima.

LikeMaBell
fonte
1
E para fazer o heroku rake db:migratecomando funcionar, eu também tive que adicionar require 'rake/dsl_definition'ao rakefile (acima da linha require 'rake').
LikeMaBell
Fazer tudo isso funciona para mim, mas não é necessário. A sugestão da NPatel acertou em cheio.
Scott Swezey
0

Se você está vendo isso em versões posteriores do Rails (como 3. +), você também pode querer verificar se seu ambiente está limpo usando RVM http://beginrescueend.com/ e criando um ruby ​​& gemset específico para seus projetos.

Use um arquivo .rvmrc por projeto, isso garantirá que você não está inserindo gems de sistema mais antigas em seus projetos. Que já me mordeu antes.

Isso evita ter que mexer com Rakefiles gerados e outros.

Jim Munro
fonte
0

bundle exec rake db: migrate resolverá seus problemas de versão ruby

Galuga
fonte
Isso só funciona se você tiver uma versão funcional do rake em seu Gemfile, e digitar "rake" está usando alguma versão diferente instalada em seu PATH
RyanHennig