Как исправить неинициализированную постоянную проблему Rake:: DSL на Heroku?

Я получаю ошибки, похожие на in эти questions, за исключением того, что мои происходят на 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 [email protected]:my_app.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:my_app.git'

Мой gemfile обычно отлично работает на Heroku. Что мне делать?

Ответ 1

Поместите это в свой Rakefile выше, чтобы требовать "rake":

require 'rake/dsl_definition'

Ответ 2

При изменении Gemfile вам необходимо bundle install обновить файл блокировки (Gemfile.lock). Ошибка, которую вы получаете нажатием, не зависит от изменения версии рейка.

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

Обратите внимание на полученное сообщение об ошибке:

Вы изменили свой Gemfile в разработке, но не смогли проверить полученный моментальный снимок (Gemfile.lock) в управлении версиями

Ответ 3

Я решил это, наконец, после многого. Короткий вариант того, что я сделал, пропуская много экспериментов, заключался в следующем:

1) измените Gemfile, чтобы указать Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Извлеките взломан, который я ранее добавил в Rakefile на основе Stack Вопрос переполнения Проблемы с Ruby on Rails и Rake: неинициализированная константа 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 работает в любом случае.

РЕДАКТОР: Он работал нормально, один раз, а затем снова взорвался в следующий раз, когда я что-то нажал! Arrgh. Я думаю, что я исправил его сейчас, добавив драгоценный камень delayed_job, основанный на разговоре Не знаю, как создавать задания задания: work.

Установка delayed_job не похоже на отличное решение, но она работает, и я, возможно, захочу использовать ее, как я полагаю, особенно с помощью задания Хроку один раз в час cron (который просто не достаточно частый - есть вещи, которые я, вероятно, захочу запустить каждые пять минут). После того, как я установил драгоценный камень delayed_job, мне пришлось выполнить настройку для него, иначе Героку жалуется на отсутствующую таблицу 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

Ответ 4

У меня было приложение Rails 3.0.11, в котором указана грабельная версия 0.8.7 в Gemfile, чтобы обойти версию 0.9.2. Проблема Rake:: DSL.

После того, как я преобразовал приложение в Rails 3.2.0 (стек кедра Героки), у меня возникла проблема с сбоем рабочего (сбойная задача). Я изменил "gem" rake "," 0.8.7 "на" gem "rake", в который была включена рейк версия 0.9.2.2. Рабочий остановился с новой версией.

Ответ 5

Ваша проблема вызвана не удалением файла Gemfile.lock и не имеет отношения к Heroku. Удаление Gemfile.lock должно устранить эту проблему, но приведет вас прямо к другому:

To [email protected]:tailored-landing-pages.git
 * [new branch]      master -> master
[email protected]:~/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>'

К сожалению, я еще не нашел решение этой проблемы, так как понижение рейтинга Rake до 0.8.7, похоже, не работает. Если кто-то еще ответит, я был бы очень признателен.