Как запустить обработчик электронной почты django + в App Engine - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь запустить приложение django и обработчик электронной почты вместе в Google App Engine. Я использую код в качестве документа Google, и он должен быть запущен с python27. Когда я преобразовал в код для Python37 получил ошибку script must be set to "auto". Может кто-нибудь мне помочь? Мой код, как показано ниже. Заранее спасибо

app.yaml:

runtime: python37

entrypoint: gunicorn -b :$PORT myproject.wsgi

env_variables:
...

inbound_services:
- mail
- mail_bounce

handlers:
- url: /static
  static_dir: static

- url: /_ah/mail/.+
  script: handle_incoming_email.app
  login: admin

handle_incoming_email.py:

import logging

from google.appengine.ext.webapp.mail_handlers import InboundMailHandler


class IncomingMailHandler(View, InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)

когда я запускаю эту ошибку возникает из сценария 'script: handle_incoming_email.app' должен быть установлен 'auto'. Как я могу получить handle_incoming_email.py в app.yaml, если я установил script: auto.

замените '. +' На '. *'.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Параметр обработчика используется для маршрутизации запросов к статическим файлам, затем все остальные маршруты направляются в ваше основное приложение (значение auto является единственной опцией для элемента script, как упомянуто в doc ) в вашей точке входа. Это приложение должно обрабатывать запросы маршрутизации. Вы не можете определить другое приложение в том же сервисе.

Я бы предложил развернуть ваше почтовое приложение как отдельную службу в вашем приложении App Engine. Это позволит вам указать конкретные ресурсы или масштабирование для каждого из них. Это будет следовать принципам архитектуры микросервисов, реализованным в App Engine.

0 голосов
/ 16 января 2019

В App Engine Standard при использовании среды выполнения Python3.7 тег script под обработчиками должен быть установлен на auto.Вы можете проверить документацию по этому здесь о том, как должен быть настроен app.yaml, обратите внимание, что он отличается от времени выполнения Python2.7, где вам нужно было указать script для запуска.

Вы можете решить эту проблему, изменив файл app.yaml, например, так:

runtime: python37

entrypoint: gunicorn -b :$PORT handle_incoming_email.app

env_variables:
...

inbound_services:
- mail
- mail_bounce

handlers:
- url: /static
  static_dir: static

- url: /_ah/mail/
  script: auto
  login: admin

Обратите внимание, что вместо требуемого изменения для script в /_ah/mail/ было autoуказать путь к скрипту для запуска.Затем обработчик должен автоматически найти сценарий для выполнения из файлов, развернутых в App Engine.

Далее, в своем файле handle_incoming_email.py вы не определяете какую-либо точку входа для обработки вашего URL /_ah/mail, вы можете решить эту проблему, добавив следующее, например:

import webapp2

app = webapp2.WSGIApplication([
    ('/_ah/mail/', IncomingMailHandler),
], debug=True)

Уведомлениетеперь, как я изменил entrypoint в вашем app.yaml файле, чтобы он соответствовал вновь созданной точке входа WSGI в вашем handle_incoming_email.py файле.

Также я не уверен насчет регулярного выражения '/. +' для обработчика, вы должны оставить его в '/. *' .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...