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.