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.