Время работы сервера nginx / gunicorn / flask истекло только при использовании mail-mail - PullRequest
0 голосов
/ 14 февраля 2019

Я создал приложение с использованием flask на python3 и развернул его с помощью nginx и gunicorn на Ubuntu 18.04.Все работало нормально (локально и на сервере), пока я не настроил поддержку почты с помощью flask-mail.На локальном сервере разработки фляг все работало нормально, но на сервере Ubuntu я всегда получаю ошибку 502 Bad Gateway.Это только когда я пытаюсь отправить почту.На "нормальных" маршрутах все отлично работает.Данные почты верны на 100%.

Я использую gunicorn в качестве сервера wsgi.Он поддерживается живым благодаря наблюдению.Я создал тестовый маршрут, только отправляя электронное письмо с приветом.Я посмотрел в каждом файле журнала, но нет вывода.Я также пытался использовать сервер разработки фляг для тестирования порта 5000, и он выдал следующую ошибку:

504 - Gateway Time-out
[2019-02-12 13:53:37,083] ERROR in app: Exception on /test/ [GET]
Traceback (most recent call last):
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ubuntu/layoutboxx/application/settings/routes.py", line 655, in change
     change_email_mail("info@fabio-oelschlaeger.de", "abc")
  File "/home/ubuntu/layoutboxx/application/mail.py", line 70, in change_email_mail
    mail.send(msg)
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask_mail.py", line 491, in send
    with self.connect() as connection:
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask_mail.py", line 144, in __enter__
    self.host = self.configure_host()
  File "/home/ubuntu/layoutboxx/.venv/lib/python3.6/site-packages/flask_mail.py", line 156, in configure_host
    host = smtplib.SMTP_SSL(self.mail.server, self.mail.port)
  File "/usr/lib/python3.6/smtplib.py", line 1031, in __init__
    source_address)
  File "/usr/lib/python3.6/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.6/smtplib.py", line 336, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/lib/python3.6/smtplib.py", line 1037, in _get_socket
    self.source_address)
  File "/usr/lib/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/lib/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
127.0.0.1 - - [12/Feb/2019 13:53:37] "GET /test/ HTTP/1.0" 500 -

Функция отправки моей почты:

def change_email(email):
    msg = Message(
        "Confirm email change",
        recipients=[email]
    )
    msg.body = render_template("mails/change_email.txt")
    msg.html = render_template("mails/change_email.html")
    mail.send(msg)

ТестПлан:

settings = Blueprint("settings",
    __name__,
    static_folder="static",
    template_folder="templates",
    subdomain="settings"
)

@settings.route("/test/")
def change():
    change_email("my@mail.com")
    return ""

Я также добавил SERVER_NAME фляги ("mydomain.com").Когда я звоню на settings.mydomain.com/test/, я получаю сообщение об ошибке тайм-аута.

Мне действительно нужна помощь, чтобы выяснить, что не так с моей конфигурацией.Моя конфигурация nginx - это какой-то стандартный обратный прокси-сервер, подобный тому, который тысячу раз встречался в Интернете и указывающий на http://localhost:8000. В Gunicorn работают 3 рабочих.

...