2012-12-04 3 views
1

나는 Heroku에서 실행하려고하는 Sinatra 앱에 내장 된 청취자가 매우 간단합니다. Tweetstream. 그것은 위로 잘 실행 얻을 수 있지만, 분 정도 후에 나는 다음과 같은 오류 얻을 :Heroku에서 Tweetstream 루프를 실행하려면 어떻게해야합니까?

여기
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

그래서 나는 이것을 스스로 해결해야했습니다.

Heroku에서 Tweetstream (Eventmachine을 사용하는 것 같습니다.)과 같이 장시간 실행되는 프로세스를 실행하는 경우 작업자 dyno를 사용해야합니다. 프로세스가 60 초 내에 완료되지 않으면 시간 제한이있는 웹 dyno. 그래서 R10 시간 초과 오류가 발생했습니다.

내가

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

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

에서 내 Procfile을 조정 한 다음 웹 프로세스를 해제하고 '노동자'

라는 이름의 작업자 프로세스를 켤 필요 작업자 다이노로 변경하려면
> heroku ps:scale web=0 worker=1 

프로젝트의이 시점에서 하나의 dyno 만 필요하기 때문에.

관련 문제