如何在Heroku上运行Tweetstream循环?

时间:2012-12-04 06:57:00

标签: ruby heroku sinatra tweetstream

我有一个相当简单的Tweetstream监听器,内置在Sinatra应用程序中,我试图在Heroku上运行。它运行良好,但大约一分钟后我收到以下错误:

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

基本上,这就是我正在运行的内容:

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

它正在启动流式监听器,如果我发推的速度足够快,它就会把它拿起来,但是Heroku似乎在tweetstream循环期间超时了。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

所以我自己做了这个工作。

当在Heroku上运行像Tweetstream这样长时间运行的过程(我相信它使用Eventmachine)时,你必须使用一个worker dyno。如果进程在60秒内没有完成,则web dyno会超时。这就是我收到R10超时错误的原因。

要更改为工作人员dyno,我需要从

调整我的Procfile
web: bundle exec rackup config.ru -p $PORT

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

然后关闭Web进程并打开名为“worker”的工作进程

> heroku ps:scale web=0 worker=1

因为我在项目的这个阶段只需要一个dyno工作。