【问题标题】:How Do I Run a Tweetstream Loop on Heroku?如何在 Heroku 上运行 Tweetstream 循环?
【发布时间】:2012-12-06 07:50:11
【问题描述】:

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

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 似乎在推文流循环期间超时。我该如何解决这个问题?

【问题讨论】:

    标签: ruby heroku sinatra tweetstream


    【解决方案1】:

    所以我自己解决了这个问题。

    在 Heroku 上运行诸如 Tweetstream(我相信它使用 Eventmachine)之类的长时间运行的进程时,您必须使用 worker dyno。如果进程未在 60 秒内完成,则 web dyno 超时。这就是我收到 R10 超时错误的原因。

    要更改为工人测功机,我需要从

    调整我的 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
    

    因为我现在只需要一个测功机在项目中工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2015-04-24
      • 2017-03-10
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多