[英]GitHub action couldn't find environment variable for Django
我試圖在我的 Django 應用程序中使用環境變量,我在本地機器中使用django-environ
package 和.env
文件。 但我不能在我的 GitHub 操作中使用.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
您需要為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 }}
附加建議
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.