Как исправить проблему неинициализированной константы Rake:: DSL на Heroku?
Я получаю ошибки, похожие на те наэтивопросы, кроме моих происходят на 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>'
ответ в этих вопросах, кажется, чтобы указать gem 'rake', '0.8.7'
потому что версия 0.9 вызывает проблему.
когда я пытаюсь добавить gem 'rake', '0.8.7'
в мой gemfile и нажмите на Heroku я получаю эту ошибку:
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'
мой gemfile нормально работает на Heroku. Что я должен делать делать?
5 ответов:
каждый раз, когда вы меняете свой Gemfile, вам нужно
bundle install
чтобы обновить файл блокировки (Gemfile.замок.) Ошибка, которую вы получаете на push, не относится к изменению версии rake.bundle install git commit -a -m "update lockfile" git push heroku master
обратите внимание на сообщение об ошибке, которое вы получили:
вы изменили свой Gemfile в разработке, но не проверили полученный снимок (Gemfile.блокировка) в управление версиями
я решил это, наконец,после многих гадостей. Короткая версия того, что я сделал, пропустив многие эксперименты, была такой:
1) измените Gemfile, чтобы указать рейк 0.8.7
#in Gemfile gem "rake", "0.8.7"
2) выньте хак, который я ранее добавил в Rakefile на основе вопроса переполнения стека Ruby on Rails and Rake проблемы: неинициализированные постоянные грабли:: DSL:
Итак, мой Rakefile теперь снова стал стандартным Rakefile для моего приложения:
# 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) Измените Heroku, чтобы запустить мое приложение в Ruby 1.9.2:
heroku stack:migrate bamboo-mri-1.9.2 --app myapp git push heroku master
и теперь это кажется прекрасным-запланированная задача cron выполняется в любом случае.
EDIT: It сделал бегите нормально, один раз, а затем взорвался снова в следующий раз, когда я толкнул что-то! Аррр. Я думаю, что я исправил это сейчас, с добавлением
delayed_job
драгоценный камень, основанный на разговоре не знаю, как построить задачу вакансии:Работа.установка
delayed_job
не похоже на отличное решение, но оно сработало, и я, возможно, захочу использовать его когда-нибудь, я думаю, особенно с работой Heroku один раз в час cron (что просто недостаточно часто-есть вещи, которые я, вероятно, захочу запускать каждые пять минут). После того, как я установилdelayed_job
gem я должен был сделать установку для него, в противном случае Heroku жалуется на отсутствиеdelayed_jobs
стол:#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
У меня было приложение Rails 3.0.11, которое указывало версию rake 0.8.7 в Gemfile, чтобы обойти проблему версии 0.9.2 Rake::DSL.
после того, как я преобразовал приложение в Rails 3.2.0 (Heroku Cedar stack), у меня возникла проблема с сбоем worker (a rake task). Я изменил "Гэм 'грабли', '0.8.7'" с "жемчужиной 'грабли'", который в комплекте грабли версию 0.9.2.2. Рабочий перестал сбой с новой версией.
ваша проблема вызвана не удалить
Gemfile.lock
файл и не является специфичным для Heroku. УдалениеGemfile.lock
он должен решить эту проблему, но приведет вас прямо к другому: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>'
к сожалению, я еще не нашел решение этой проблемы, так как понижение рейка до 0.8.7, похоже, здесь не работает. Если у кого-то еще есть ответ, я был бы очень признателен.