Im using Resque + RedisToGo for my background jobs. I am having trouble running background tasks on Heroku. Its strange because, the first time I run a background job, it gets executed without any issues. But when I run it again, it doesnt execute. I would have to run “heroku restart’, every other time for a background to complete successfully….
For example. If I have the following code in my Resque background action:
module EncodeSong
@queue = :encode_song
def self.perform(media_id, s3_file_url)
puts 'foobar'
media = Media.find(media_id)
puts 'media id is supposed to be here'
puts media.id
puts s3_file_url
end
end
In “heroku console”, I do:
Resque.enqueue(EncodeSong, 26, 'http://actual_bucket_name.s3.amazonaws.com/unencoded/users/1/songs/test.mp3')
In “heroku logs”, I can see the 4 “puts”, when I run the above code for the first time. But running it a second time, only returns ‘foobar’. The other “puts” are not displayed…..
I suspect that it is not able to run “media = Media.find(media_id)”, the second time around. This is only happening on the production server on Heroku. On our local development machine, we do not experience this problem…. Anyone know what is wrong?
PS. I have tried enabling Heroku logs, but still don’t get any useful response. I have followed this tutorial to set up Heroku with Resque
Seems like your job is failing (probably you’re right about the ‘media = Media.find’ line). Look through the resque admin interface. Look for failed jobs, there you’ll find the backtrace of each failed job.
Hope this helps.