![](/img/trans.png)
[英]Running Django migrations when deploying to Elastic Beanstalk
[英]Run migrations on Dockerfile deploying on Elastic Beanstalk
我在 Elastic beanstalk 上進行遷移(Django App 4.0.6)時遇到問題。
這是我的 Dockerfile:
FROM python:3.8
ENV PROJECT_DIR=/usr/src/app/
ENV PYTHONIOENCODING=utf-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PIPENV_USE_SYSTEM=1
WORKDIR ${PROJECT_DIR}
COPY . ./
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
到這里為止,一切正常,但是如果我嘗試在EXPOSE 8000
之前添加RUN python manage.py migrate
並進行部署,則會出現 504 錯誤。
我嘗試像這樣添加.ebextensions 和配置文件:
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
但是我不確定如何在 Docker 中激活我的環境,當我嘗試進行部署時出現錯誤
2022-08-01 03:10:23,328 P28507 [INFO] Command 01_migrate
2022-08-01 03:10:23,331 P28507 [INFO] -----------------------Command Output-----------------------
2022-08-01 03:10:23,331 P28507 [INFO] /bin/sh: /var/app/venv/*/bin/activate: No such file or directory
2022-08-01 03:10:23,331 P28507 [INFO] ------------------------------------------------------------
2022-08-01 03:10:23,331 P28507 [ERROR] Exited with error code 1
¿ 對於我的情況,最好的解決方案是什么?
謝謝你的幫助: :)
如果您沒有使用 docker compose 進行部署,那么您可以添加一個入口點文件並在那里運行您的遷移和服務器命令。
# Dockerfile
...
RUN pip install -r requirements.txt
EXPOSE 8000
ENTRYPOINT ["bin/production-entrypoint.sh"]
您的bin/production-entrypoint.sh
文件如下所示:
#!/bin/bash
source /var/app/venv/*/bin/activate
python3 manage.py migrate
python manage.py runserver 0.0.0.0:8000
或者,如果您使用 docker compose 進行部署,則可以運行docker-compose.yml
文件中的命令:
# Dockerfile
...
RUN pip install -r requirements.txt
EXPOSE 8000
# docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- "8000:8000"
env_file:
- .env
volumes:
- /var/app/current:/usr/src/app
command: >
bash -c "source /var/app/venv/*/bin/activate
&& python3 manage.py migrate
&& python manage.py runserver 0.0.0.0:8000
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.