I have a fairly simple Tweetstream listener built in a Sinatra app that I am trying to get running on Heroku. It gets up and running fine, but after about a minute I get the following error:
2012-12-04T06:23:31+00:00 heroku[web.1]: Stopping process with SIGKILL
2012-12-04T06:23:31+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Here is, basically, what I’m running:
require 'sinatra'
client = TwitterListener.new
puts "starting Twitter listener..."
client.restart
require 'tweetstream'
class TwitterListener
def initialize
@client = TweetStream::Client.new
...
@events = Events.new
end
def restart
...
@client.follow(users) do |status|
@events.mention_artist?(status, artists)
@events.retweet_artist?(status, artists)
end
end
end
It’s starting the streaming listener and if I tweet fast enough, it picks it up, but Heroku seems to time out during the tweetstream loop. How can I fix this?
So I manged to work this out myself.
When running something a long running process like Tweetstream (which uses Eventmachine, I believe) on Heroku, you must use a worker dyno. The web dyno with time out if a process doesn’t complete in 60 seconds. That’s why I was getting the R10 timeout error.
To change to a worker dyno I needed to adjust my Procfile from
to
And then turn off the web process and turn on a worker process named ‘worker’
Because I only need one dyno working at this point in the project.