Question

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?

Was it helpful?

Solution

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

web: bundle exec rackup config.ru -p $PORT

to

worker: bundle exec rackup config.ru -p $PORT

And then turn off the web process and turn on a worker process named 'worker'

> heroku ps:scale web=0 worker=1

Because I only need one dyno working at this point in the project.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top