python - GitHub 操作找不到 Django 的环境变量

标签 python django github environment-variables github-actions

我试图在 Django 应用程序中使用环境变量,其中我将 django-environ 包与本地计算机中的 .env 文件一起使用。但我无法在 GitHub 操作中使用 .env 文件。我已从项目设置中手动配置了操作 secret 变量。 这是我的本地机器代码:

import environ

env = environ.Env()
environ.Env.read_env()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env('POSTGRES_DB_NAME'),
        'USER': env('POSTGRES_USER'),
        'PASSWORD': env('POSTGRES_PASSWORD'),
        'HOST': env('POSTGRES_HOST'),
        'PORT': env('POSTGRES_PORT'),
    }
}

此代码在我的本地环境中运行,但无法在 GitHub 操作中加载。我也在 GitHub 操作中配置了相同的变量,但应用程序仍然无法在 GitHub 操作中找到环境变量。

django.yml

name: Django CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.7, 3.8, 3.9]

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Tests
      run: |
        python manage.py test

GitHub 操作显示以下错误:

Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/environ/environ.py", line 403, in get_value
    value = self.ENVIRON[var_name]
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/os.py", line 681, in __getitem__
    raise KeyError(key) from None
KeyError: 'POSTGRES_DB_NAME'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/commands/test.py", line 23, in run_from_argv
    super().run_from_argv(argv)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/base.py", line 346, in run_from_argv
    parser = self.create_parser(argv[0], argv[1])
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/base.py", line 320, in create_parser
    self.add_arguments(parser)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/core/management/commands/test.py", line 44, in add_arguments
    test_runner_class = get_runner(settings, self.test_runner)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/test/utils.py", line 317, in get_runner
    test_runner_class = test_runner_class or settings.TEST_RUNNER
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/conf/__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/django/conf/__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/runner/work/lha-backend/lha-backend/root/settings.py", line 87, in <module>
    'NAME': env('POSTGRES_DB_NAME'),
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/environ/environ.py", line 201, in __call__
    parse_default=parse_default
  File "/opt/hostedtoolcache/Python/3.7.13/x64/lib/python3.7/site-packages/environ/environ.py", line 407, in get_value
    raise ImproperlyConfigured(error_msg) from exc
django.core.exceptions.ImproperlyConfigured: Set the POSTGRES_DB_NAME environment variable

最佳答案

您需要为您的 run 步骤配置 env,如下所示:

    - name: Run Tests
      run: |
        python manage.py test
      env:
        POSTGRES_DB_NAME: ${{ secrets.POSTGRES_DB_NAME }}
        POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
        POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
        POSTGRES_HOST: ${{ secrets.POSTGRES_HOST }}
        POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }}

相关文档:https://docs.github.com/en/actions/security-guides/encrypted-secrets#using-encrypted-secrets-in-a-workflow

其他建议

  • 对 GitHub key 和环境变量使用相同的名称
  • 如果您想在多个存储库中使用相同的 key ,请在 GitHub 上创建一个组织

关于python - GitHub 操作找不到 Django 的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73172760/

相关文章:

python - 在 DARKNET 训练期间得到 -NaN,我做错了什么?

python - Django Redis错误未知命令 'BZPOPMIN'

python:分割句子进行注释

python - 如何将泊松概率仅转换为小数

python - 将具有相同字段值的对象分组

android - 我如何为每个拉取请求托管一个 Android APK 文件,以便 QA 可以在合并之前测试它们?

GitHub Pages : How do I edit this page in markdown format, 就像我创建的那样?

github图片路径

python - pip install pcapy 无法打开包含文件 'pcap.h'

python - 探戈与 Django : URLconf defined in tango_with_django_project. 网址。找不到网页