【问题标题】:The SECRET_KEY setting must not be empty. Django dockerSECRET_KEY 设置不能为空。 Django 码头工人
【发布时间】:2021-12-29 10:15:10
【问题描述】:

我试图在堆栈和其他网站上找到解决方案,但没有结果。我和 django 战斗了几天。

我将 django 应用程序 dockerized,它运行良好。我正在使用 .env 文件来提供秘密变量。从这里开始问题。我无法在 Visual Studio Code 中使用 travis CI 或调试模式,因为我的 env 变量不可见。当我尝试运行 travis 或调试器时,我收到错误“SECRET_KEY 设置不能为空”。问题是,如何正确配置我的 django 应用程序或 docker 实例以在每种情况下使用环境变量?几天前,我尝试编写 secret_key 而不隐藏它,但是我的调试器与数据库连接失败,所以我的变量似乎根本不可见。但正如我所说,当我以正常模式或作为 docker 实例运行我的应用程序时,它工作正常,我的 .env 文件对 django 是可见的。在这里你可以找到我的settings.py

from os.path import join, dirname
import os
from dotenv import load_dotenv
from django.contrib.messages import constants as messages


dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv('SEC_KEY')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'PORT': 5432

    }
}

这是我的 docker-compose 文件:

version: '3.4'

services:
  electronicshop:
    image: electronicshop
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - .:/electronic_shop
    command: >
      sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    # env_file:
    #   - .env
    environment:
      - DB_HOST=db
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASS=&{DB_PASSWORD}
      - DEBUG=1
    depends_on:
      - db
    restart: always

  db:
    image: postgres:14.1-alpine
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    ports:
      - 5454:5454/tcp

【问题讨论】:

  • 首先手动填写密钥,检查其他参数是否正常运行
  • 你在使用 python_dotenv 吗?如果是,请确保您的 settings.py 中有load_dotenv()
  • @sarangkkl 正如我所说,我手动编写了密钥,但处于调试模式。 Django 尖叫数据库凭据错误,因此在调试模式或 trevis CI 中似乎 env 变量不可见。我也不想使用密钥推送到我的 github 设置。
  • @reppon 是的,我正在使用 load_dotenv()。在我的帖子中更新了我的 setting.py。

标签: django visual-studio-code docker-compose environment-variables travis-ci


【解决方案1】:

问题解决了。我必须将 secret_key 添加到 docker-compose 环境中。

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2017-06-04
    • 1970-01-01
    • 2013-10-08
    • 2020-08-23
    • 2016-12-25
    • 2017-10-03
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多