【问题标题】:Django on Docker - relation "django_session" does not exist at character 109Docker 上的 Django - 字符 109 处不存在关系“django_session”
【发布时间】:2017-02-15 12:03:09
【问题描述】:

我正在尝试使用 Docker 运行基于 coockiecutter 的 Django 项目,但出现以下错误:

完整输出:https://dpaste.de/eKF5

sudo docker-compose up
crm_postgres_1 is up-to-date
Starting crm_django_1
Starting crm_nginx_1
Attaching to crm_postgres_1, crm_django_1, crm_nginx_1
django_1    | Postgres is up - continuing...
postgres_1  | LOG:  database system was shut down at 2017-02-15 10:39:52 UTC
postgres_1  | LOG:  MultiXact member wraparound protections are now enabled
postgres_1  | LOG:  database system is ready to accept connections
postgres_1  | LOG:  autovacuum launcher started
postgres_1  | LOG:  received smart shutdown request
postgres_1  | LOG:  autovacuum launcher shutting down
postgres_1  | LOG:  shutting down
postgres_1  | LOG:  database system is shut down
postgres_1  | LOG:  database system was shut down at 2017-02-15 10:41:58 UTC
postgres_1  | LOG:  MultiXact member wraparound protections are now enabled
postgres_1  | LOG:  database system is ready to accept connections
postgres_1  | LOG:  autovacuum launcher started
postgres_1  | ERROR:  relation "django_session" does not exist at character 109
postgres_1  | STATEMENT:  SELECT "django_session"."session_key", "django_session"."session_data", "django_session"."expire_date" FROM "django_session" WHERE ("django_session"."expire_date" > '2017-02-15T11:04:25.807267+00:00'::timestamptz AND 

我应该检查什么?我自己无法调试。

【问题讨论】:

    标签: django docker docker-compose


    【解决方案1】:

    您需要运行迁移来创建数据库表。

    通常,您使用 migrate 命令来执行此操作。

    python manage.py migrate
    

    在您的情况下,您需要在容器内运行迁移。 Cookiecutter-Django docs 提供说明如何执行此操作:

    docker-compose run django python manage.py migrate
    

    【讨论】:

    • 我之前做过(在我问这个问题之前)
    • 运行时发生了什么?由于这些表不存在,它看起来好像不起作用,但您没有提供任何信息来帮助调试。
    • 我得到所有迁移已执行的标准信息,例如:Applying xxx.0003_auto... OK 等。如果我现在运行它,我有:dpaste.de/6XZz
    • 我从头开始,现在我有了:dpaste.de/iLyb - 在 127.0.0.1 上是 Internal Server Error。日志在这里:dpaste.de/GXbY
    【解决方案2】:

    您也可以只为会话应用程序运行迁移。

    docker-compose -f production.yml(local.yml) run django python manage.py 
    migrate sessions
    

    【讨论】:

      【解决方案3】:

      如果运行“迁移”命令没有为您创建表,请检查 django_migrations 表中名为“会话”的“应用程序”列中的条目 如果有条目,则删除它们(从 django_migrations where app = 'sessions'; 中删除)并重新运行“迁移”脚本。 这同样适用于您可能正在使用的其他缺少数据库表的应用程序......迁移脚本只会运行 django_migrations 表中未列出的脚本。

      【讨论】:

        【解决方案4】:

        对我有用的东西,

        首先我执行命令docker-compose build 创建图像,然后执行docker-compose up

        一旦我的 django 服务器启动,我打开另一个命令行,连接到容器 (docker exec -it container_name bash) 并在 python manage.py migrate; python manage.py makemigrations 内执行。

        顺便说一下,这些是我的 Dockerfile 和 docker-compose.yml 文件内容:

        FROM python:3.7
        ENV PYTHONUNBUFFERED 1
        RUN mkdir /code
        WORKDIR /code
        ADD . /code/
        RUN pip install --upgrade pip && pip install -r requirements.txt
        COPY . /code/
        
        version: '3'
        
        services: 
          web:
            build: .
            command: python manage.py runserver 0.0.0.0:8000
            volumes:
              - .:/code
            ports:
              - "8000:8000"
        

        【讨论】:

          猜你喜欢
          • 2019-01-24
          • 1970-01-01
          • 2018-10-25
          • 2020-10-02
          • 1970-01-01
          • 1970-01-01
          • 2014-11-30
          • 2021-03-09
          • 2016-11-03
          相关资源
          最近更新 更多