L'accesso globale ai metodi Rake DSL è deprecato


86

Sto lavorando al tutorial di Ruby on Rails 3 e ho digitato quanto segue sulla riga di comando:

rake db:migrate

che ha prodotto il seguente avvertimento.

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'

Non sono sicuro di cosa fare o come lavorarci. Non conosco nessun altro comando per Rake.

Come posso risolvere questo problema?

Risposte:


64

Ho trovato questo nella domanda di Stack Overflow Ruby on Rails e problemi di Rake: costante Rake :: DSL non inizializzata . Si riferisce a un tweet @DHH.

Metti quanto segue nel tuo Gemfile

gem "rake", "0.8.7"

Potresti vedere qualcosa di simile

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

Avevo ancora una copia di Rake 0.9.1 nella mia directory, quindi l'ho cancellata.

Puoi "eliminare" Rake 0.9.1 eseguendo il seguente comando:

gem uninstall rake -v=0.9.1

Se hai più versioni della gemma installate, ti verrà chiesto di scegliere una versione.

Dopo aver ripulito 0.9.1, ho eseguito

bundle update rake

ed è stato finalmente in grado di creare i miei file di database. Lo stavo usando rake db:create, ma dovrebbe funzionare anche per rake db:migrate.

Spero possa essere d'aiuto.


5
Non ha funzionato per me. Ho dovuto effettivamente rimuovere rake 0.9.1> gem disinstalla rake -v = 0.9.1 e poi> aggiornamento bundle Grazie Antonio

1
Sono d'accordo con Antonio - quando ho detto di rimuovere il rake 0.9.1 intendevo usando gem uninstall rake -v=0.9.1. Errore mio per non averlo chiarito. Grazie per la precisazione Antonio! Saluti, Brian
Brian Bruijn

13
Non penso sia bene usare deliberatamente le vecchie librerie, quando è possibile far funzionare una nuova, vedendo il commento qui sotto.
Smar

2
La soluzione più semplice è quella suggerita da NPatel di seguito. Basta aggiungere una riga a Rakefile.
Slobodan Kovacevic

Non ho avuto fortuna con questa risoluzione. Si è verificato ancora lo stesso errore dopo aver disinstallato rake 0.9.1 o 0.9.2 e aver eseguito l'aggiornamento del bundle.
Marc

111

Anche l'aggiunta include Rake::DSLal Rakefile prima che le applicazioni load_tasks venissero chiamate ha funzionato per me.

Quindi, nel caso dell'utente di cui sopra, prima DemoApp::Application.load_tasksdel file Rake.


Grazie. Corretto il mio "ATTENZIONE: l'accesso globale ai metodi Rake DSL è deprecato." problema.
Slobodan Kovacevic

È questo il modo corretto per risolvere questo problema?
Marc

2
@ Marc, attualmente questa è l'unica correzione che conosco senza aggiornare a rails 3.0.8 o versioni successive. Questo problema è stato risolto in quella versione: github.com/rails/rails/commit/… . Se trovi una soluzione migliore, fammelo sapere. Inoltre, secondo l'avvertimento, penserei che sia la soluzione corretta.
Patelify

1
Questa è la soluzione che ho scelto. Preferirei semplicemente aggiungere la riga piuttosto che giocare con quale versione di Rake funziona con cosa.
jaydel

2
Questo ha funzionato per me con 1.9.2 e Rails 3.0.7 con Rake 0.9.2
Steven Chanin

5

Ho riscontrato lo stesso problema su Windows con il programma di installazione. Ruby 1.9.2 e Rails 3.0.9. Ecco cosa ho fatto:

bundle update rake
bundle show rake

Dopo averlo fatto, stavo eseguendo rake 0.9.2.

Quindi ho aggiornato il Rakefile nella cartella principale dell'applicazione come segue:

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

Come indicato nel commento, assicurati che il nome della tua app sia corretto nelle due righe appropriate sopra.


1
E per far funzionare il heroku rake db:migratecomando, ho anche dovuto aggiungere require 'rake/dsl_definition'al rakefile (sopra la riga require 'rake').
LikeMaBell

Fare tutto questo funziona per me, ma non è necessario. Il suggerimento di NPatel ha funzionato bene.
Scott Swezey

0

Se lo vedi nelle versioni successive di Rails (come 3. +) potresti anche voler verificare che il tuo ambiente sia pulito usando RVM http://beginrescueend.com/ e creando un ruby ​​& gemset specifico per i tuoi progetti.

Usa un file .rvmrc per progetto, questo ti garantirà di non inserire gem di sistema più vecchie nei tuoi progetti. Che mi ha morso prima.

Questo impedisce di dover scappare con Rakefile generati e simili.


0

bundle exec rake db: migrate risolverà i tuoi problemi con la versione di ruby


Funziona solo se hai una versione funzionante di rake nel tuo Gemfile e digitando "rake"
stai
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.