ElasticBeanstalk неожиданно начинает сбой развертывания приложения Django с исключением «Невозможно использовать ImageField, потому что Pillow не установлена» - PullRequest
1 голос
/ 21 февраля 2020

Я использую beanstalk elasti c для развертывания моего Django приложения. Сегодня он неожиданно перестал работать без каких-либо серьезных изменений со стороны приложения (я изменил некоторые шаблоны, не более того).

Время ожидания развертывания истекло после 10 минут попытки развернуть приложение, и ничего не происходит.

Единственные более или менее полезные советы, которые я вижу в журнале, таковы:

[2020-02-20T15:00:20.437Z] INFO  [19057] - [Application update .../postbuild_0_myproject/Command 01_migrate] : Activity execution failed, because: SystemCheckError: System check identified some issues:

  ERRORS:
  education.Author.photo: (fields.E210) Cannot use ImageField because Pillow is not installed.
  HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
  education.Course.cover_image: (fields.E210) Cannot use ImageField because Pillow is not installed.
  HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
  education.CourseCategory.icon_image: (fields.E210) Cannot use ImageField because Pillow is not installed.
  HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
  Using staging settings
  App receivers connected
   (ElasticBeanstalk::ExternalInvocationError)


[2020-02-20T15:00:20.437Z] INFO  [19057] - [Application update .../postbuild_0_myproject/Command 01_migrate] : Activity failed.
[2020-02-20T15:00:20.437Z] INFO  [19057] - [Application update .../postbuild_0_myproject] : Activity failed.
[2020-02-20T15:00:20.437Z] INFO  [19057] - [Application update ...] : Activity failed.
[2020-02-20T15:00:20.507Z] INFO  [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142/AppDeployStage0/EbExtensionPostBuild] : Activity failed.
[2020-02-20T15:00:20.507Z] INFO  [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142/AppDeployStage0] : Activity failed.
[2020-02-20T15:00:20.508Z] INFO  [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142] : Completed activity. Result:
  Application update - Command CMD-AppDeploy failed

Но у меня уже есть Подушка в requirements.txt, а в журнале выше написано:

  Requirement already satisfied: Pillow==6.2.1 in /opt/python/run/venv/lib64/python3.6/site-packages (from -r /opt/python/ondeck/app/requirements.txt (line 51))

Как я могу устранить неполадки и исправить это? И как я могу избежать подобных проблем в будущем? Я действительно напуган тем, что та же проблема может случайно появиться в производственной среде.


Вот еще немного информации о конфигурации:

Вот что у меня есть в .ebextensions :

01_packages.config:

packages:
  yum:
    git: []
    postgresql93-devel: []

db-migrate.config

container_commands:
  01_migrate:
    command: "django-admin.py migrate"
    leader_only: true
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: myproject.settings

django.config

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: myproject/wsgi.py

wsgi_custom.config

files:
  "/etc/httpd/conf.d/wsgihacks.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIPassAuthorization On

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

У меня было две среды Elasti c Beanstalk с одной и той же проблемой (одна среда веб-уровня и рабочая среда).

В одной из них проблема была решена путем перезапуска среды.

Другой не удалось перезапустить и таймаут каждый раз при любой операции. Это мне удалось исправить, перейдя в конфигурацию> емкость и изменив минимальное и максимальное количество экземпляров на 0. Я применил изменения, дождался их применения и затем возвратил предыдущие значения для минимального и максимального номеров экземпляров.

Это решило проблему.

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

0 голосов
/ 21 февраля 2020

Это боль и известная проблема с Django при использовании модели / формы ImageField. Из-за динамической системы импорта Pythons c она внезапно появится и раздражает меня до чертиков, когда я впервые столкнулся с ней.

Обычно я исправляю это с помощью conda и его эквивалента virtualenv для обеспечения использования правильного интерпретатора (с моими пакетами).

Если вы не используете virtualenv или эквивалент, настройте его сейчас, если вы уже используете его, проверьте, что вы устанавливаете подушку с pip3 install pillow - значение pip3 здесь важно, как в системах Debian (и многих других), обычно pip будет установлен только для python 2.x.

Использование conda гарантирует, что этого не произойдет на производстве, но я бы также добавил его в ваш список проверяемых вещей при развертывании - проверьте правильную версию настройки и работы подушки.

...