Problemy z Ruby on Rails i Rake: niezainicjowana stała Rake :: DSL


189

Mam naprawdę frustrujący problem: Rake jest głupi.

Oto jak pojawia się problem:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

Oba działają dobrze, ale kiedy to robię,

$ rake db:migrate

Pojawia się następujący błąd.

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

Szukałem w Internecie podobnych / tych samych błędów, a ludzie je mieli. Po prostu nikt nigdy nie wydaje się rozwiązać problemu!

Jak rozwiązać ten problem?

Odpowiedzi:


193

Tweet od DHH wcześniej. Rake .9.0 psuje szyny i kilka innych rzeczy, musisz:

gem "rake", "0.8.7"

w twoim Gemfile.


17
To zadziałało dla mnie. bundle update rakeNajpierw musiałem to zrobić . Potem sprawdziłem z bundle show rake. Powinien powiedzieć 0.8.7. Potem rake db:migrate.
B, 7

26
Albo jeszcze lepiej: gem "rake", "!= 0.9.0". Pozwala to uniknąć zepsutej wersji 0.9.0, ale zostanie zaktualizowana do nowszej po opublikowaniu nowszej wersji (usunięcie tego później nie zaszkodzi, ale utrzymanie go również nie powinno zaszkodzić).
Spiralis

6
@Spiralis Wystąpił również problem z wersją 0.9.2. Może być konieczne dodanie tej linii dla kilku wersji.
dharmatech

3
To rozwiązanie pracował dla mnie pracować. Podobnie jak @dharmatech, pojawia się ten problem heroku rake db:migratei wydaje się, że to rozwiązało. pamiętaj, aby dodać i zatwierdzić te zmiany w git przed kontynuowaniem;)
pruett

1
Może to działać w przypadku Railsów, ale musiałem również sudo gem install rakeupewnić się, że rakewersja, do której dzwoniłem z linii poleceń, nie była w wersji 0.8.7.
Autumnsault

72

Przeprowadziłem badania tuż po mojej poprzedniej odpowiedzi (przepraszam, muszę to zrobić wcześniej).

Wszystkie problemy zostały rozwiązane dzięki klejnotowi Rake 0.9.2 .. Wykonałem następujące kroki:

  • Zainstalowałem gem install rake -v=0.9.2(miałem klejnot 0.9.1)
  • usunąłem 0.9.1 z gem uninstall rake -v=0.9.1
  • zaktualizowane o bundle update
  • wtedy db:migratepokazał ostrzeżenie,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Zostało to rozwiązane poprzez dodanie następujących elementów do pliku prowizji.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • I, pominięte z module ::RakeFileUtils extend Rake::FileUtilsExtendopcji sugested przez @databyte.

Oznacza to, że klejnot Rake 0.9.2 działa dobrze!


Wykonałem pierwsze trzy kroki i nie dostałem ostrzeżenia, więc nie zawracałem sobie głowy resztą, dziękuję za sugestię!
Abe Petrillo

1
To każe mi zapytać ... Dlaczego powinienem zhakować Rake, aby zachować tę funkcję? Co Rake próbuje zrobić i czego powinienem teraz użyć?
Ryanmt,

@Arrumaco, Jaki jest katalog pliku Rake?
Ctak

Warto zauważyć, że dodatek do RakeFilepowinien być wcześniej require 'rake'- złapał mnie :)
Ciaran Archer

12
ten sam problem, ale już miałem rake (0.9.2, 0.8.7). Ponowne zainstalowanie wersji 0.9.2 wydaje się jednak naprawiać problem: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

Przechodząc przez rozdział 2 Poradnika kolejowego (demo_app) i napotkałem ten problem. Próbowałem wszystkich innych odpowiedzi tutaj wymienionych, ale nie mogłem go uruchomić, dopóki nie zrobiłem tego:

Umieść to w swoim Rakefile powyżej wymaga „prowizji”:

require 'rake/dsl_definition'

przez Jak naprawić niezainicjowany stały problem Rake :: DSL na Heroku?

Ponownie poleciłem i przesłałem wszystkie pliki do Github i Heroku.


To wydaje się najlepszą odpowiedzią, ponieważ obniżenie z 0.9.2 do 0.8.7 przerwałoby niektóre zależności klejnotów w zależności od przypadku, takie jak mój :) Dzięki!
DiegoSalazar

To nie działa dla mnie. Otrzymuję komunikat „brak takiego pliku do załadowania - rake / dsl_definition” podczas rake db: create
KMC

25

Wszystko, co musiałem zrobić, to użyć:

gem install rake

Miałem już wersję 0.9.2, po prostu potrzebowałem instalacji.


wow, zadziałało dla mnie. Ale czy mógłbyś wyjaśnić, dlaczego muszę instalować prowizję, kiedy ja już powinienem tam być?
KMC

Wciąż nie jestem ekspertem, ale rozumiem, że istnieje różnica między „instalowaniem” klejnotów na komputerze a „instalowaniem” ich w rejestrze klejnotów - podejrzewam, że dzieje się tak, ponieważ instalacja Ruby musi wiedzieć, które klejnoty są gdzie na twoim komputerze. Być może jest to coś, co można zautomatyzować w przyszłości, lub jest już zautomatyzowane w niektórych dystrybucjach Ruby ...
Branstar

19

Ponownie zainstaluj klejnot prowizji i powinien działać dobrze:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

Jeśli nie, podaj wersję „0.8.7” w swoim pliku Gemfile.


takie podejście zadziałało dla mnie i wolałem nie obniżać wersji.
Tarnschaf,

Pracowałem również dla mnie, tylko dla prowizji -v 0.9.2.2
Haspemulator

10

Jeśli nie używasz Bundlera:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Następnie wybierz odinstalować wersję 0.9.0.


to naprawiło to dla mnie bez pakietu (szyny 2.3.8). Próbowałem zainstalować rake 0.9.2, ale to nie rozwiązało problemu. W końcu zadziałało zainstalowanie wersji 0.8.7 i odinstalowanie wersji 0.9.2.
Michael Durrant

8

Jeśli tak jak ja, utknąłeś na prowizji 0.8.7 i używasz Rails 3.2.x, a następnie kolej wymaga dodania Rake :: DSL

Aby rozwiązać ten problem, na górze swojego pliku Rakefile powinieneś dodać:

module Rake
  module DSL
  end
end

7

Rozwiązałem ten sam problem, wykonując następujące czynności:

W Gemfile:

gem 'rake', '0.9.2'

Następnie uruchomiłem to na konsoli:

sudo bundle update rake

Następnie dodano następujące wiersze do Rakefile:

require 'rake/dsl_definition'
include Rake::DSL


4

Miałem ten sam problem i musiałem użyć klejnotu rake 0.8.7 zamiast 0.9.0.


4

Jestem użytkownikiem systemu Windows XP i miałem ten sam problem.

Wprowadziłem gem „rake”, „0.8.7” do pliku gem, a następnie wpisałem następujące polecenie w oknie poleceń.

bundle update rake

To naprawiło mój problem.


też dla mnie pracował od dzisiaj. po prostu próbuję zakodować szyny na Win7.
arscariosus

4
  1. Przejdź do ścieżki projektu
  2. Rodzaj bundle install --path=vendor/bundle
  3. Rodzaj bundle exec rake db:migrate

Aby uruchomić typ serwera bundle exec rails s. Użyj bundle exec, a będziesz mieć pewność, że użyjesz odpowiednich klejnotów (wymagana wersja) do swojego projektu. Również polecam Ci dodać vendor/bundledo .gitignorejeśli używasz giti zrobić alias bundle exec. Jeśli używasz zsh, możesz zastosować to podejście


3

Tak samo jak Branstar powyżej - dzięki Branstar!

  • System operacyjny: Windows Vista
  • Poziom: Całkowicie nowy w Ruby on Rails
  • Mam już zainstalowany Ruby 1.9.2

Postępowałem zgodnie z instrukcjami w Running Rails 3 w systemie Windows .

Wszystko działało aż do części „rake db: migrate”, która dała mi takie same wyniki jak oryginalny post.

Prowadziłem:

gem install rake

Ponownie pobiegłem:

rake db:migrate

Potem mogłem uruchomić serwer Ruby on Rails i wszystko miałem na swoim miejscu.

Jeszcze raz dziękuję Branstar :-)


2

Współczuję tobie (Michaiłowie), to naprawdę frustrujące. Szaleję przez prawie cały dzień. Nawet odinstalowałem Ruby i wszystkie jego zależne pliki i zamknąłem komputer, ale nadal mam ten sam problem.

To, co otrzymałem z komunikatu o błędzie, to problem z Rake 0.9.2. Wygląda na to, że nie został w pełni zainstalowany. Musiałem więc ponownie zainstalowaćgem install rake -v=0.9.2

Nie byłem pewien, czy mam zainstalowaną prowizję –v0.9.1. Aby upewnić się, że jestem bezpieczny, próbowałem usunąć tę starą wersję gem uninstall rake -v=0.9.1. Ale pokazuje mi komunikat o błędzie

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

OK, więc sprawdziłem wszystkie katalogi Rake na moim komputerze i stwierdziłem, że mam tylko Rake 0.9.2. Następnie, aby sprawdzić, czy wszystko poszło dobrze, przeprowadziłem migrację rake db:migrate. I zadziałało :)

Myślę, że nie miałem Rake 0.9.1, ponieważ wyczyściłem Ruby ( rubyinstaller-1.9.2-p180 - na moim systemie Windows 7) i wszystkie klejnoty. W międzyczasie Rake 0.9.2 nie został w pełni zainstalowany.


2

Deinstalacja z „gem deinstalatorem rake” działała dla mnie, miałem zainstalowane 2 wersje, więc wykonałem czystą ponowną instalację.

„rake db: create” , aby upewnić się, że baza danych istnieje, a następnie „rake db: migrate”, aby zamknąć ofertę.


2

Miałem ten sam problem przy użyciu Rake 0.9.2.2. Rozwiązałem ten problem za pomocą exec pakietu.



0

Zainstaluj rake 0.8.7 i odinstaluj 0.9.2.2

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

Teraz użyj

$ bundle exec rake db:migrate

myślę, że to ci pomoże;)


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.