2011-06-01 13 views
86

estoy trabajando a través del rubí en los carriles 3 libro tutorial y escribí lo siguiente en la línea de comandos:Acceso global a Rake métodos DSL está en desuso

rake db:migrate 

que produjo la siguiente advertencia.

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/[email protected]/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks' 

No estoy seguro de qué hacer con eso o cómo trabajar con él. No conozco ningún otro comando para Rake.

¿Cómo puedo solucionar este problema?

Respuesta

64

Encontré esto en Stack Overflow question Ruby on Rails and Rake problems: uninitialized constant Rake::DSL. Se refiere a un tweet @DHH.

poner lo siguiente en su Gemfile

gem "rake", "0.8.7" 

Usted puede ver algo como

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

Todavía tenía una copia de Rake 0.9.1 en mi directorio, así que lo borre.

Usted puede "eliminar" Rake 0.9.1 ejecutando el siguiente comando:

gem uninstall rake -v=0.9.1 

Si tiene varias versiones de la gema instalado, se le pedirá para recoger una versión.

Después 0.9.1 se limpió, me encontré con

bundle update rake 

y finalmente fue capaz de crear los archivos de base de datos. Yo estaba usando rake db:create, pero debería funcionar para rake db:migrate también.

Espero que ayude.

+1

Estoy de acuerdo con Antonio - cuando dije para eliminar rastrillo 0.9.1 me refería a través de el uso de 'joya de desinstalación rastrillo -v = 0.9.1'. Mi error por no dejarlo en claro. Gracias por la aclaración Antonio! Saludos, Brian –

+5

Eso no funcionó para mí. De hecho, tuve que eliminar rastrillo 0.9.1> joya desinstalación rake -v = 0.9.1 y luego> actualizar paquete Gracias Antonio –

+1

Gracias funcionó como un encanto. – chell

111

Añadiendo include Rake::DSL al Rakefile antes de que se llamaran las aplicaciones load_tasks también funcionó para mí.

Por lo tanto, en el caso del usuario anterior antes del DemoApp::Application.load_tasks en el Rakefile.

+0

Gracias. Se corrigió mi "ADVERTENCIA: el acceso global a los métodos DSL Rake está en desuso". problema. –

+0

¿Es esta la manera correcta de solucionar este problema? – Marc

+2

@Marc, actualmente esta es la única solución que conozco sin actualizar a los rieles 3.0.8 o superior. Este problema se resuelve en esa versión: https://github.com/rails/rails/commit/83f257fc4862642af29056cb5b7dfef6e1303754. Si encuentra una solución mejor, por favor hágamelo saber. Además, según la advertencia, creo que es la solución adecuada. – Patelify

5

Estaba teniendo el mismo problema en Windows con el instalador. Ruby 1.9.2 y Rails 3.0.9. Esto es lo que hice:

bundle update rake 
bundle show rake 

Después de hacer eso yo estaba corriendo rastrillo 0.9.2.

Entonces actualizado la Rakefile en la carpeta raíz de la aplicación de la siguiente manera:

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 

Como se señaló en el comentario, asegúrese de que el nombre de su aplicación es correcta en las dos líneas apropiadas anteriores.

+1

Y para que el comando 'heroku rake db: migrate' funcione, también tuve que agregar' require 'rake/dsl_definition'' al rakefile (por encima de la línea' rake '). – LikeMaBell

+0

Hacer todo esto funciona para mí, pero no es necesario. La sugerencia de NPatel se manejó bien. –

0

Si está viendo esto en versiones posteriores de Rails (como 3. +) también puede verificar si su entorno está limpio utilizando RVM http://beginrescueend.com/ y creando un gemset de ruby ​​& específico para sus proyectos.

Utilice un archivo .rvmrc por proyecto, esto le garantizará que no obtenga gemas del sistema más antiguas en sus proyectos. Lo cual me ha mordido antes.

Esto evita tener que andar con los archivos generados Rakefiles &.

0

paquete ejecutivo de rake db: migrate va a resolver su versión rubí emite

+0

Esto solo funciona si tienes una versión funcional de rake en tu Gemfile, y si escribes "rake" usarás una versión diferente instalada en tu PATH – RyanHennig