1

Herokuで実行しようとしているSinatraアプリに組み込まれたかなり単純なTweetstreamリスナーがあります。正常に起動して実行されますが、約 1 分後に次のエラーが表示されます。

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 がタイムアウトしたようです。どうすればこれを修正できますか?

4

1 に答える 1

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

プロジェクトのこの時点で動作する必要があるのは 1 つの dyno だけだからです。

于 2012-12-05T23:50:11.373 に答える