Globalny dostęp do metod Rake DSL jest przestarzały


86

Pracuję nad poradnikiem Ruby on Rails 3 i wpisałem w wierszu poleceń:

rake db:migrate

co spowodowało następujące ostrzeżenie.

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'

Nie wiem, co z tym zrobić ani jak z tym pracować. Nie znam innego polecenia dla Rake.

Jak mogę rozwiązać ten problem?

Odpowiedzi:


64

Znalazłem to w pytaniu o przepełnienie stosu Ruby on Rails i Rake: niezainicjalizowana stała Rake :: DSL . Odnosi się do tweeta @DHH.

Umieść następujące informacje w swoim Gemfile

gem "rake", "0.8.7"

Możesz zobaczyć coś takiego

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

Wciąż miałem kopię Rake 0.9.1 w swoim katalogu, więc ją usunąłem.

Możesz „usunąć” Rake 0.9.1, uruchamiając następujące polecenie:

gem uninstall rake -v=0.9.1

Jeśli masz zainstalowanych wiele wersji klejnotu, zostaniesz poproszony o wybranie wersji.

Po wyczyszczeniu wersji 0.9.1 pobiegłem

bundle update rake

i wreszcie mogłem stworzyć moje pliki bazy danych. Używałem rake db:create, ale powinno też działać rake db:migrate.

Mam nadzieję, że to pomoże.


5
To mi się nie udało. Musiałem faktycznie usunąć rake 0.9.1> gem uninstall rake -v = 0.9.1, a następnie> aktualizacja pakietu Dzięki Antonio

1
Zgadzam się z Antonio - kiedy powiedziałem o usunięciu prowizji 0.9.1, miałem na myśli używanie gem uninstall rake -v=0.9.1. Mój błąd, że nie wyjaśniłem tego jasno. Dzięki za wyjaśnienie Antonio! Pozdrawiam, Brian
Brian Bruijn

13
Nie sądzę, aby dobrze było celowo korzystać ze starych bibliotek, kiedy można sprawić, by nowsze działały, patrz komentarz poniżej.
Smar

2
Bardziej prostym rozwiązaniem jest to, które proponuje NPatel poniżej. Po prostu dodaj jedną linię do Rakefile.
Slobodan Kovacevic

Nie miałem szczęścia z tą rozdzielczością. Nadal pojawiał się ten sam błąd po odinstalowaniu rake 0.9.1 lub 0.9.2, a następnie uruchomieniu aktualizacji pakietu.
Marc

111

Dodanie include Rake::DSLdo Rakefile przed wywołaniem aplikacji load_tasks również zadziałało.

Tak więc w powyższym przypadku użytkownika przed DemoApp::Application.load_tasksw pliku Rakefile.


Dzięki. Naprawiono moje „OSTRZEŻENIE: Globalny dostęp do metod Rake DSL jest przestarzały”. problem.
Slobodan Kovacevic

Czy to właściwy sposób rozwiązania tego problemu?
Marc

2
@Marc, obecnie jest to jedyna poprawka, jaką znam bez aktualizacji do rails 3.0.8 lub nowszych. Ten problem został rozwiązany w tej wersji: github.com/rails/rails/commit/… . Jeśli znajdziesz lepsze rozwiązanie, daj mi znać. Ponadto zgodnie z ostrzeżeniem myślę, że to właściwa poprawka.
Patelify

1
To jest rozwiązanie, które wybrałem. Wolałbym po prostu dodać linię, niż grać w gry, w których wersja Rake działa z czym.
jaydel

2
To zadziałało dla mnie z 1.9.2 i Rails 3.0.7 z Rake 0.9.2
Steven Chanin.

5

Miałem ten sam problem w systemie Windows z instalatorem. Ruby 1.9.2 i Rails 3.0.9. Oto co zrobiłem:

bundle update rake
bundle show rake

Po wykonaniu tej czynności korzystałem z prowizji 0.9.2.

Następnie zaktualizowałem Rakefile w głównym folderze aplikacji w następujący sposób:

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

Jak wspomniano w komentarzu, upewnij się, że nazwa Twojej aplikacji jest poprawna w dwóch odpowiednich wierszach powyżej.


1
Aby heroku rake db:migratepolecenie zadziałało, musiałem również dodać require 'rake/dsl_definition'do pliku rakefile (powyżej wymaganej linii „rake”).
LikeMaBell

Robienie tego wszystkiego działa dla mnie, ale nie jest potrzebne. Sugestia NPatel załatwiła to dobrze.
Scott Swezey

0

Jeśli widzisz to w późniejszych wersjach Railsów (np. 3. +), możesz również chcieć sprawdzić, czy twoje środowisko jest czyste, używając RVM http://beginrescueend.com/ i tworząc specyficzny ruby ​​& gemset dla swoich projektów.

Używaj pliku .rvmrc dla każdego projektu, to zagwarantuje, że nie dostaniesz starszych klejnotów systemowych do swoich projektów. Który wcześniej mnie ugryzł.

Zapobiega to konieczności małpowania z wygenerowanymi plikami Rakefile itp.


0

bundle exec rake db: migrate rozwiąże problemy z wersją Ruby


Działa to tylko wtedy, gdy masz działającą wersję rake w swoim Gemfile, a wpisanie „rake” oznacza użycie innej wersji zainstalowanej w PATH
RyanHennig
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.