簡體   English   中英

ElasticBeanstalk 突然開始無法部署 Django 應用程序,並出現“無法使用 ImageField,因為未安裝 Pillow”異常

[英]ElasticBeanstalk suddenly starts failing to deploy Django App with "Cannot use ImageField because Pillow is not installed" exception

我正在使用彈性 beantalk 來部署我的 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有 Pillow 並且上面的日志說:

  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

這是使用ImageField模型/表單時 Django 的一個痛苦和已知問題。 由於 Python 的動態導入系統,當我第一次遇到它時,它會突然出現並讓我惱火。

我通常解決這個問題的方法是使用conda及其等效的 virtualenv 來確保使用正確的解釋器(帶有我的包的解釋器)。

如果您沒有使用 virtualenv 或等效工具,請立即設置一個,如果您已經在使用,則檢查您是否正在使用pip3 install pillow - pip3在這里很重要,因為在 debian(和許多其他)系統上,正常的pip只會為 python 2.x 安裝。

使用 conda 將確保在生產中不會發生這種情況,但我也會將它添加到部署時要測試的事項清單中 - 檢查正確版本的枕頭設置和工作。

我有兩個具有相同問題的 Elastic Beanstalk 環境(一個 Web 層環境和一個工作環境)。

其中一個問題是通過重新啟動環境解決的。

另一個在任何操作時都無法重新啟動並超時。 我設法通過轉到配置 > 容量並將最小和最大實例數更改為 0 來修復這個問題。我已應用更改,等待它們應用,然后返回最小和最大實例數的先前值。

這解決了問題。

我仍然不知道是什么導致了這個問題,並希望收到一些評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM