代码之家  ›  专栏  ›  技术社区  ›  Maruf Khan

GitHub操作无法找到Django的环境变量

  •  1
  • Maruf Khan  · 技术社区  · 2 年前

    django-environ .env 文件在我的本地计算机中。但是我不能用 .环境 动作秘密变量 手动从我的项目设置。 这是我的本地机器代码:

    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
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Mandera    2 年前

    env 为了您的 run 步骤如下:

        - 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上创建一个组织