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


101

Otrzymuję błędy podobne do tych w tych pytaniach , z wyjątkiem tego, że moje dotyczą Heroku :

2011-05-30T09:03:29+00:00 heroku[worker.1]: Starting process with command: `rake jobs:work`
2011-05-30T09:03:30+00:00 app[worker.1]: (in /app)
2011-05-30T09:03:30+00:00 heroku[worker.1]: State changed from starting to up
2011-05-30T09:03:33+00:00 app[worker.1]: rake aborted!
2011-05-30T09:03:33+00:00 app[worker.1]: uninitialized constant Rake::DSL
2011-05-30T09:03:33+00:00 app[worker.1]: /app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'

Wydaje się, że odpowiedzią na te pytania jest sprecyzowanie, gem 'rake', '0.8.7'ponieważ wersja 0.9 powoduje problem.

Kiedy próbuję dodać gem 'rake', '0.8.7'do mojego gemfile i wypchnąć do Heroku, pojawia się ten błąd:

Unresolved dependencies detected; Installing...
You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

You have added to the Gemfile:
* rake (= 0.8.7)
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
error: hooks/pre-receive exited with error code 1
To git@heroku.com:my_app.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:my_app.git'

Mój plik gemfile normalnie działa dobrze na Heroku. Co powinienem zrobić?


Czy wypróbowałeś opublikowaną przez siebie odpowiedź nr 3 ? Co się stało po wprowadzeniu tych zmian?
Zabba

Odpowiedzi:


205

Umieść to w swoim Rakefile powyżej, wymagaj 'rake':

require 'rake/dsl_definition'

3
Dziękuję Ci. To rozwiązało moje problemy i nie wiedziałem, co się dzieje. (Używanie instalatora szyn w systemie Windows i wdrażanie na heroku, jako zupełnie początkujący.)
Jack V,

1
czy to rozwiązanie działa w systemie Windows, ponieważ nadal otrzymuję ten sam błąd - niezainicjowana stała Rake :: DSL
David

2
Wystąpił błąd podczas wdrażania do Heroku, który dzisiaj ściągnął rake 0.9.2. Ponieważ pierwotny problem dotyczył wersji 0.9.0, być może wersja rake nie jest już problemem. Dodanie tej requirelinii do pliku rakefile (i ponowne wysłanie i ponowne wysłanie do github i Heroku) rozwiązało problem. @David, używam systemu Windows ze strukturą RoR z RailInstaller 1.2.0.
Mark Berry

Aby to zadziałało, musisz zaktualizować grę do wersji 0.9.2. Powodzenia!
RubyFanatic

Otrzymuję ten błąd podczas rake db: create, „no such file to load - rake / dsl_definition”
KMC,

8

Za każdym razem, gdy zmieniasz plik Gemfile, musisz bundle installzaktualizować swój plik blokujący (Gemfile.lock). Błąd, który otrzymujesz podczas wypychania, nie jest specyficzny dla zmiany wersji rake.

bundle install
git commit -a -m "update lockfile"
git push heroku master

Zwróć uwagę na otrzymany komunikat o błędzie:

Zmodyfikowałeś swój Gemfile w fazie rozwoju, ale nie sprawdziłeś powstałego obrazu stanu (Gemfile.lock) w kontroli wersji


1
Może być konieczne uruchomienie „prowizji za aktualizację pakietu”, aby zregenerować Gemfile.lock.
Jan Hettich

6

W końcu to rozwiązałem, po wielu błądzeniach. Krótka wersja tego, co zrobiłem, pomijając wiele eksperymentów, była następująca:

1) zmień plik Gemfile, aby określić Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Usuń hack, który wcześniej dodałem do Rakefile w oparciu o pytanie przepełnienia stosu Ruby on Rails i Rake: niezainicjalizowana stała Rake :: DSL :

Tak więc mój plik Rakefile wrócił teraz do standardowego pliku Rakefile dla mojej aplikacji:

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'rake'

MyApp::Application.load_tasks

3) Zmień Heroku, aby uruchomić moją aplikację w Ruby 1.9.2:

heroku stack:migrate bamboo-mri-1.9.2 --app myapp
git push heroku master

I wydaje się teraz w porządku - zaplanowane zadanie cron i tak jest uruchomione.

EDIT: To nie działają dobrze, raz, a potem wysadzili następnym razem podsunąłem coś! Arrgh. Myślę, że naprawiłem to teraz, dodając delayed_jobklejnot, na podstawie rozmowy Nie wiem, jak budować zadania zadaniowe: praca .

Instalacja delayed_jobnie wydaje się świetnym rozwiązaniem, ale zadziałała i myślę, że może kiedyś zechcę z niej skorzystać, zwłaszcza w przypadku pracy cron w Heroku raz na godzinę (co po prostu nie jest wystarczająco częste - są rzeczy, które ja '') Prawdopodobnie będę chciał biegać co pięć minut). Po zainstalowaniu delayed_jobklejnotu musiałem go skonfigurować, w przeciwnym razie Heroku narzeka na brakujący delayed_jobsstół:

#add to gemfile
gem 'delayed_job'

#at command line
bundle install
rails g delayed_job
rake db:migrate
git add -A
git commit -a -m "added delayed_job gem"
git push
heroku rake db:migrate --app myapp
heroku restart --app myapp

1

Miałem aplikację Rails 3.0.11, która określiła rake w wersji 0.8.7 w pliku Gemfile, aby obejść problem z wersją 0.9.2 Rake :: DSL.

Po przekonwertowaniu aplikacji na Rails 3.2.0 (stos Heroku Cedar) miałem problem z awarią pracownika (zadanie rake). Zmieniłem „rake za klejnoty”, „0.8.7” na „rake za klejnoty”, co obejmowało wersję 0.9.2.2. Pracownik przestał się zawieszać z nową wersją.


0

Twój problem jest spowodowany Gemfile.lockbrakiem usunięcia pliku i nie jest specyficzny dla Heroku. Usunięcie Gemfile.lockpowinno rozwiązać ten problem, ale prowadzi bezpośrednio do kolejnego:

To git@heroku.com:tailored-landing-pages.git
 * [new branch]      master -> master
manfred@painstation2:~/Desktop/projects/ror/ta/tlp307$ heroku rake db:migrate
rake aborted!
ninitialized constant Rake::DSL
/app/Rakefile:13:in `<class:Application>'
/app/Rakefile:12:in `<module:Tlp307>'
/app/Rakefile:11:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

Niestety, nie znalazłem jeszcze rozwiązania tego problemu, ponieważ obniżenie Rake do 0.8.7 nie wydaje się działać tutaj. Gdyby ktoś inny miał odpowiedź, byłbym bardzo wdzięczny.


4
Nigdy nie polecałbym usuwania twojego pliku blokującego.
wuputah

2
Usunięcie Gemfile.lock spowoduje zainstalowanie wszystkich najnowszych wersji wszystkich klejnotów przy każdym wdrożeniu do heroku (chyba że przypniesz wszystkie wersje w Gemfile).
Kliment Mamykin
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.