Fil*_*ire 4 python django postgresql makemigrations
我使用基于 Django 的应用程序创建一个容器,使用 PostgreSQL 构建另一个容器,使用docker-compose.
makemigrations如果我在应用程序 docker 容器(链接到 PostgreSQL 容器)内运行bash 会话的外部,如下所示:
python manage.py makemigrations myapp
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
django.db.utils.OperationalError: could not
translate host name "db" to address: nodename
nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
这是有道理的:我在容器执行上下文之外没有任何 PostgreSQL 实例(和配置)。
根据我过去使用其他语言的经验以及类似这篇文章的经验,我希望运行makemigrations并提交它。
这是创建和提交迁移文件的最佳方法:
settings.py DATABASE为能够makemigrations从本地 bash 会话运行命令?makemigrations容器内部执行的结果复制到我的存储库中,然后提交吗?docker-entrypoint.sh方法(示例)进行迁移并运行它们?我希望运行 makemigrations 并提交它。
你是对的,迁移应该始终致力于回购。
我是否应该尝试公开 PostgreSQL 容器并更改 settings.py DATABASE 以便能够从本地 bash 会话运行 makemigrations 命令?
我个人不会这样做。
如何在本地代码和docker之间实现近乎无缝的集成是一个有很多答案的问题。我喜欢将我的代码作为卷安装到容器中,然后,当您运行时makemigrations在容器中运行时,创建的迁移也会出现在您的计算机上。
像这样的事情在docker-compose.yml
app:
...
volumes:
- path/to/local/src/:/src/
working_dir: /src
Run Code Online (Sandbox Code Playgroud)
/src你的文件夹在哪里manage.py. 现在,当你这样做时
docker exec -it container_name python manage.py makemigrations它将在您的本地计算机中创建迁移文件,并且您来回复制它不会出现问题。
但请注意文件权限,因为在这种情况下,可能会使用根所有者创建迁移,具体取决于您的主机操作系统。但我想这是为了另一个问题。
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |