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>'
The answer in those questions seems to be to specify
gem 'rake', '0.8.7' because the 0.9 version causes the problem.
When I try to add
gem 'rake', '0.8.7' to my gemfile and push to Heroku I get this error:
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 firstname.lastname@example.org:my_app.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'email@example.com:my_app.git'
My gemfile normally works fine on Heroku. What should I do?
I solved this, finally, after a lot of mucking about. The short version of what I did, missing out the many experiments, was this:
1) change the Gemfile to specify Rake 0.8.7
#in Gemfile gem "rake", "0.8.7"
2) Take out a hack that I had previously added to Rakefile based on Stack Overflow question Ruby on Rails and Rake problems: uninitialized constant Rake::DSL:
So, my Rakefile is now back to being the standard Rakefile for my app:
# 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) Change Heroku to run my app in Ruby 1.9.2:
heroku stack:migrate bamboo-mri-1.9.2 --app myapp git push heroku master
And it seems fine now - the scheduled cron task is running anyway.
EDIT: It did run fine, once, then blew up again next time I pushed something! Arrgh. I think I fixed it now, with the addition of the
delayed_job gem, based on the conversation Don't know how to build task jobs:work.
delayed_job doesn't seem like a great solution, but it HAS worked, and I might want to use it sometime I guess, especially with Heroku's once-per-hour cron job (which just isn't frequent enough - there are things I'll probably want to run every five minutes). After I installed the
delayed_job gem I had to do the setup for it, otherwise Heroku complains about the missing
#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