2016-07-13 3 views
0

У меня есть простая программа Python, которая повторяет следующий процесс с интервалом в 30 секунд: использует API Gmail для проверки моего почтового ящика, поиска определенного типа почты, и если это нашел, использует Twilio API, чтобы позвонить мне.Проблемы с развертыванием простого скрипта Python для продолжения работы на Heroku

Я запускаю эту программу на своей машине, но я бы хотел, чтобы она работала 24x7. Друг сказал, что я должен это сделать, используя Героку. Я не могу понять, как это сделать, и будет признателен за любую помощь. Я установил Heroku и сначала попробовал развернуть мой скрипт (который я воспроизвел ниже) и получил ошибки, воспроизведенные в конце сообщения.

Я также попытался запустить его в функции приложения «Флаш», но код запускался только один раз, когда я открыл ссылку 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; если этого не произойдет, Героку предполагает, что что-то пошло не так, и объявляет, что приложение разбилось.

Возможно, вы могли бы заставить его работать - например, создать веб-процесс, который просто повторяет статус для удовлетворения требования «привязки», а затем использовать надстройку «Планировщик» для запуска вашего скрипта каждые несколько минут или определить сценарий как «рабочий» процесс. Кроме того, вы можете посмотреть другие решения, такие как AWS Lambda.