El acceso global a los métodos Rake DSL está en desuso

86

Estoy trabajando en el libro tutorial de Ruby on Rails 3 y escribí lo siguiente en la línea de comando:

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/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

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

¿Como puedo solucionar este problema?

chell
fuente

Respuestas:

64

Encontré esto en la pregunta de Stack Overflow Ruby on Rails y problemas de Rake: Rake constante no inicializado :: DSL . Se refiere a un tweet de @DHH.

Pon lo siguiente en tu Gemfile

gem "rake", "0.8.7"

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 la eliminé.

Puede "eliminar" Rake 0.9.1 ejecutando el siguiente comando:

gem uninstall rake -v=0.9.1

Si tiene instaladas varias versiones de la gema, se le pedirá que elija una.

Después de limpiar 0.9.1, ejecuté

bundle update rake

y finalmente pude crear mis archivos de base de datos. Estaba usando rake db:create, pero también debería funcionar rake db:migrate.

Espero que ayude.

Brian Bruijn
fuente
5
Eso no me funcionó. De hecho, tuve que eliminar rake 0.9.1> gem uninstall rake -v = 0.9.1 y luego> actualización del paquete Gracias Antonio
1
Estoy de acuerdo con Antonio: cuando dije que eliminara el rastrillo 0.9.1 me refería a usar gem uninstall rake -v=0.9.1. Mi error por no dejarlo claro. Gracias por la aclaración Antonio! Saludos, Brian
Brian Bruijn
13
No creo que sea bueno usar deliberadamente bibliotecas antiguas, cuando se puede hacer que una más nueva funcione, vea el comentario a continuación.
Smar
2
La solución más simple es la sugerida por NPatel a continuación. Simplemente agregue una línea a Rakefile.
Slobodan Kovacevic
No tuve suerte con esta resolución. Todavía apareció con el mismo error después de desinstalar rake 0.9.1 o 0.9.2 y luego ejecutar la actualización del paquete.
Marc
111

Agregar include Rake::DSLal Rakefile antes de que se llamaran las aplicaciones load_tasks también funcionó para mí.

Entonces, en el caso del usuario anterior antes del DemoApp::Application.load_tasksen el Rakefile.

Patelify
fuente
Gracias. Se corrigió mi "ADVERTENCIA: el acceso global a los métodos Rake DSL está obsoleto". problema.
Slobodan Kovacevic
¿Es esta la forma correcta de solucionar este problema?
Marc
2
@Marc, actualmente esta es la única solución que conozco sin actualizar a rieles 3.0.8 o superior. Este problema se resuelve en esa versión: github.com/rails/rails/commit/… . Si encuentra una solución mejor, hágamelo saber. Además, de acuerdo con la advertencia, creo que es la solución adecuada.
Patelify
1
Esta es la solución con la que fui. Preferiría simplemente agregar la línea que jugar juegos con qué versión de Rake funciona con qué.
Jaydel
2
Esto funcionó para mí con 1.9.2 y Rails 3.0.7 con Rake 0.9.2
Steven Chanin
5

Tenía el mismo problema en Windows con el instalador. Ruby 1.9.2 y Rails 3.0.9. Aquí esta lo que hice:

bundle update rake
bundle show rake

Después de hacer eso, estaba ejecutando rake 0.9.2.

Luego actualicé el 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 indica en el comentario, asegúrese de que el nombre de su aplicación sea correcto en las dos líneas correspondientes anteriores.

LikeMaBell
fuente
1
Y para que el heroku rake db:migratecomando funcione, también tuve que agregarlo require 'rake/dsl_definition'al archivo rake (arriba de la línea require 'rake').
LikeMaBell
Hacer todo esto funciona para mí, pero no es necesario. La sugerencia de NPatel lo manejó bien.
Scott Swezey
0

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

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

Esto evita tener que jugar con Rakefiles generados y demás.

Jim Munro
fuente
0

bundle exec rake db: migrate resolverá los problemas de la versión ruby

Galuga
fuente
Esto solo funciona si tiene una versión funcional de rake en su Gemfile, y al escribir "rake" está usando una versión diferente instalada en su PATH
RyanHennig