2016-07-13 3 views
0

다음과 같은 프로세스를 30 초 간격으로 반복하는 간단한 Python 프로그램이 있습니다. Gmail API를 사용하여받은 편지함을 확인하고 특정 종류의 메일을 찾으며 발견, Twilio API를 사용하여 나를 호출합니다.간단한 Python 스크립트를 배포하여 Heroku에서 계속 실행하는 데 문제가 있음

나는 내 컴퓨터에서이 프로그램을 실행했지만, 연중 무휴로 실행하고 싶습니다. 친구가 Heroku를 사용하여이 작업을 수행 할 수 있다고 말했습니다. 나는 이것을 어떻게하는지 이해할 수없고 어떤 도움을 주셔서 감사합니다. 나는 Heroku를 설정하고, 먼저 스크립트를 배포하려고했는데 (아래에서 재현했습니다) 게시물의 끝에 오류가 재현되었습니다.

Flask 앱 기능 내에서 실행 해 보았지만 Heroku 링크를 열었을 때 코드가 한 번만 실행되어 백그라운드에서 계속 실행되도록 할 수 없었습니다.

다른 방법으로/다른 플랫폼/플랫폼 제공 업체를 사용해야하는 경우 알려 주시기 바랍니다.

#Procfile 
web: python gmail_twilio.py 

#Logs error 
2016-07-13T03:35:39.635528+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=pacific-woodland-28065.herokuapp.com request_id=54912af8-83a6-4feb-bb36-def791621e5f fwd="171.50.142.162" dyno= connect= service= status=503 bytes= 

#gmail_twilio.py 

while True: 
    inbox_list = ListMessagesMatchingQuery(service, '##', query="in:inbox -label:called ")# create list with non called labels 
    if len(inbox_list)>0: 
    twiliocall() # function to call me 
    for element in inbox_list: 
     ModifyMessage(service, 'me', element[u'id'], {'removeLabelIds': [], 'addLabelIds': ['Label_3']}) # add called label 
    time.sleep(30) # wait for 30 seconds 

답변

0

Heroku 플랫폼은 임의의 데몬이 아닌 웹 응용 프로그램을 호스팅하기 위해 설계되었습니다. heroku logs의 출력을 보면 "R10 웹 프로세스를 바인딩하지 못했습니다."와 같은 오류가 표시됩니다. Heroku는 웹 프로세스가 $PORT을 통해 전달 된 포트에 바인드하여 웹 요청을 수신 대기 할 것으로 기대하기 때문입니다. 그런 일이 발생하지 않으면 Heroku는 어떤 일이 잘못되었다고 생각하고 앱이 추락했다고 선언합니다.

예를 들어 "bind"요구 사항을 충족시키기 위해 상태를 에코 한 웹 프로세스를 만든 다음 "Scheduler"애드온을 사용하여 몇 분마다 스크립트를 실행하거나 스크립트를 "작업자"프로세스로 사용하십시오. 또는 AWS Lambda와 같은 다른 솔루션을 살펴볼 수도 있습니다.

관련 문제