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 '[email protected]:my_app.git'
Mój plik gemfile normalnie działa dobrze na Heroku. Co powinienem zrobić?
Odpowiedzi:
Umieść to w swoim Rakefile powyżej, wymagaj 'rake':
źródło
require
linii 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.Za każdym razem, gdy zmieniasz plik Gemfile, musisz
bundle install
zaktualizować swój plik blokujący (Gemfile.lock). Błąd, który otrzymujesz podczas wypychania, nie jest specyficzny dla zmiany wersji rake.Zwróć uwagę na otrzymany komunikat o błędzie:
źródło
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
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:
3) Zmień Heroku, aby uruchomić moją aplikację w Ruby 1.9.2:
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_job
klejnot, na podstawie rozmowy Nie wiem, jak budować zadania zadaniowe: praca .Instalacja
delayed_job
nie 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 zainstalowaniudelayed_job
klejnotu musiałem go skonfigurować, w przeciwnym razie Heroku narzeka na brakującydelayed_jobs
stół:źródło
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ą.
źródło
Twój problem jest spowodowany
Gemfile.lock
brakiem usunięcia pliku i nie jest specyficzny dla Heroku. UsunięcieGemfile.lock
powinno rozwiązać ten problem, ale prowadzi bezpośrednio do kolejnego: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.
źródło