Сообщение об ошибке: объект NoneType не может быть вызван. - получено от zappa развернутое приложение django на AWS Lambda

Я столкнулся с ошибкой после развертывания моего приложения django на лямбда с помощью zappa.

Это ошибка:

{'message': 'An uncaught exception happened while servicing this request. You can investigate this with the `zappa tail` command.', 'traceback': ['Traceback (most recent call last):', ' File /var/task/handler.py, line 540, in handler with Response.from_app(self.wsgi_app, environ) as response:', ' File /var/task/werkzeug/wrappers/base_response.py, line 287, in from_app return cls(*_run_wsgi_app(app, environ, buffered))', ' File /var/task/werkzeug/wrappers/base_response.py, line 26, in _run_wsgi_app return _run_wsgi_app(*args)', ' File /var/task/werkzeug/test.py, line 1119, in run_wsgi_app app_rv = app(environ, start_response)', TypeError: 'NoneType' object is not callable]}

Это мои настройки Zappa:

{
  "production": {
    "aws_region": "eu-west-2",
    "django_settings": "app.settings",
    "profile_name": "deployment",
    "project_name": "app",
    "runtime": "python3.6",
    "s3_bucket": "zappa-deployment-uploads",
    "slim_handler": true,
    "exclude": [".ebextensions/", ".elasticbeanstalk/", "webpack/", "app/static/"],
    "vpc_config" : {
    "SubnetIds": [ "..."],
    "SecurityGroupIds": ["..."]
  }
}

Я убедился, что мое имя хоста шлюза API было добавлено в мои настройки разрешенных хостов и повторно развернуто.

Я вызвал zappa tail, но это дает мне еще более короткую ошибку, отвечающую, что объект «NoneType» не может быть вызван.

Кто-нибудь может понять, зачем мне это?


person goose    schedule 10.05.2021    source источник


Ответы (1)


В вашем коде возникает исключение. Я обнаружил, что NoneType — это общая ошибка при использовании AWS Lambda & Zappa, которая маскирует истинную проблему.

Некоторые шаги отладки:

  1. Убедитесь, что ваш код работает локально, когда вы запускаете python manage.py runserver
  2. Выводить консольные сообщения в разных местах вашего кода и запускать zappa tail, чтобы определить участок кода, в котором возникли проблемы.
  3. Повторяйте вышеописанный вариант, пока не сузите местонахождение проблемы.
person Edgar    schedule 10.05.2021
comment
Спасибо Эдгар. Я следую вашему совету и, конечно же, он перестал работать на локальном компьютере. Вернусь сюда и дам вам знать, как я поживаю в ближайшее время. - person goose; 11.05.2021
comment
К сожалению, даже после исправления этого на локальном компьютере я все еще получаю то же сообщение об ошибке после повторного развертывания в Lambda. - person goose; 13.05.2021
comment
@goose, вы успешно распечатываете какие-либо консольные сообщения до возникновения ошибки? - person Edgar; 16.05.2021
comment
Привет, @Edgar. Я возвращал свое приложение обратно к приложению в стиле привет, мир и обнаружил, что проблема связана с версией Django. Это работает, когда я возвращаюсь к Django == 2.0.0. Я использовал Django == 3.2.3. Я не уверен, поддерживается ли это, я нигде не вижу, что это поддерживается в документах. Я видел на этом видео (youtube.com/watch?v=oRaUXvUWJ0U) в 11 :48 что из коробки работает только с Django==2.0.0, но можно заставить работать и с более новыми версиями с некоторыми изменениями, но не сказано какими, к сожалению. - person goose; 18.05.2021
comment
@goose - извините за беспокойство. В настоящее время я использую Django 3.1.5 на образе python 3.8 lambci и Zappa 0.52 — работает вполне нормально. Я попробую обновиться до 3.2.x и протестировать. Я предлагаю вам перейти на 3.1 и попробовать это. - person Edgar; 19.05.2021
comment
Спасибо, Эдгар, очень поучительно. Я так понимаю, вы используете Докер? Я не в настоящее время, и я предполагаю, что теперь это может быть одной из причин моих проблем. - person goose; 19.05.2021
comment
Docker, безусловно, лучший способ обеспечить совместимость с AWS Lambda. На самом деле был просто еще один вопрос о проблемах с Zappa и оказалось, что они собирают виртуальную среду с скомпилированными пакетами на MacOS. Перешел на Docker и все заработало. - person Edgar; 20.05.2021
comment
Не могли бы вы кратко описать свой подход к использованию Docker? Используете ли вы docker compose с файлом dockerfile? Я не думаю, что вы могли бы поделиться отредактированной версией вашего файла докеров, если вы это сделаете? Я использовал Docker один или два раза раньше, но я далеко не профессионал! Не беспокойтесь, если нет. - person goose; 20.05.2021
comment
Хорошо, я думаю, что получил достаточно хорошее обновление здесь - docs .docker.com/samples/django/#define-the-project-components, но не стесняйтесь добавлять любые указатели. Пометка этого ответа как правильного, поскольку он работает на локальном компьютере, является хорошим руководством, только с модификацией для использования докера с образом lambci. - person goose; 22.05.2021
comment
У меня есть курс с несколькими бесплатными уроками, посвященными докеру: newline .co/courses/serverless-django-with-zappa/welcome - person Edgar; 14.06.2021
comment
Спасибо, Эдгар, проверим. - person goose; 15.06.2021
comment
Эдгар, возможно, немного позже, чем вы ожидали, но после небольшого отдыха я прошел большую часть вашего курса и развернул приложение Django на лямбда-выражении. Мне все еще нужно фактически развернуть свое собственное приложение, используя то же самое, но это действительно хорошо, как будто я разблокирован. Некоторое время бился головой о стену. Спасибо за создание курса. К вашему сведению, я столкнулся с AttributeError: объект «Шаблон» не имеет атрибута «add_description». Мне пришлось закомментировать self.cf_template.add_description (автоматически сгенерированный Zappa) из файла zappa core.py, чтобы заставить это работать. - person goose; 15.07.2021
comment
Привет еще раз - я все еще сталкиваюсь с проблемами, но у меня есть вещи, которые мне нужно попробовать. Однако из интереса может ли тот факт, что моя лямбда-функция имеет размер 159 МБ, указывать на проблему? Мне интересно, есть ли в миксе какие-то большие активы или все функции django lambda в конечном итоге становятся такими большими. Мое первоначальное развертывание всегда не распаковывается. Я всегда должен увеличить время ожидания и запустить тест, чтобы распаковать его. Затем при повторном запуске функции я вижу в журналах следующее: amazonaws, найденный в объекте «NoneType» хоста, не вызывается. Исключение получено при отправке HTTP-запроса. - person goose; 16.07.2021
comment
@goose попробуйте вариант slim_handler с сайта github.com/zappa/Zappa#large-projects. - person Edgar; 17.07.2021