Fabric:执行 makemigrations 和 migrate 引发密钥错误

Fabric: executing makemigrations & migrate raises Secret Key Error

我正在研究 fabfile.py 以停止重复并自动部署。

我正在使用 fabric 提供的 prefix("workon vpenv"): 但问题是:当 运行ning git 拉动时一切正常,但是当我 运行 run("python manage.py makemigrations --settings=config.settings.production") 我收到以下错误:

[venuepark.com] run: python manage.py makemigrations --settings=config.settings.production
[venuepark.com] out: Traceback (most recent call last):
[venuepark.com] out:   File "manage.py", line 22, in <module>
[venuepark.com] out:     execute_from_command_line(sys.argv)
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
[venuepark.com] out:     utility.execute()
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 307, in execute
[venuepark.com] out:     settings.INSTALLED_APPS
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
[venuepark.com] out:     self._setup(name)
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/site-packages/django/conf/__init__.py", line 41, in _setup
[venuepark.com] out:     self._wrapped = Settings(settings_module)
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/site-packages/django/conf/__init__.py", line 110, in __init__
[venuepark.com] out:     mod = importlib.import_module(self.SETTINGS_MODULE)
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/importlib/__init__.py", line 126, in import_module
[venuepark.com] out:     return _bootstrap._gcd_import(name[level:], package, level)
[venuepark.com] out:   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
[venuepark.com] out:   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
[venuepark.com] out:   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
[venuepark.com] out:   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
[venuepark.com] out:   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
[venuepark.com] out:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[venuepark.com] out:   File "/home/tony/vp/vp/config/settings/production.py", line 1, in <module>
[venuepark.com] out:     from .base import *
[venuepark.com] out:   File "/home/tony/vp/vp/config/settings/base.py", line 24, in <module>
[venuepark.com] out:     SECRET_KEY = os.environ["VP_SECRET_KEY"]
[venuepark.com] out:   File "/home/tony/.virtualenvs/vpenv/lib/python3.6/os.py", line 669, in __getitem__
[venuepark.com] out:     raise KeyError(key) from None
[venuepark.com] out: KeyError: 'VP_SECRET_KEY'
[venuepark.com] out: 


Fatal error: run() received nonzero return code 1 while executing!

Requested: python manage.py makemigrations --settings=config.settings.production
Executed: /bin/bash -l -c "cd /home/tony/vp/vp >/dev/null && workon vpenv && python manage.py makemigrations --settings=config.settings.production"

我的fabfile.py如下:

def deploy():
    code_directory = "/path/to/somewhere"
    with cd(code_directory):
        with prefix("workon vpenv"):
            run("git pull")
            run("python manage.py makemigrations --settings=config.settings.production")
            run("python manage.py migrate --settings=config.settings.production")
            run("python manage.py collectstatic --settings=config.settings.production")

        sudo("pkill gunicorn")
        sudo("systemctl daemon-reload")
        sudo("systemctl start gunicorn")
        sudo("systemctl enable gunicorn")
        sudo("systemctl restart nginx")

什么可能导致错误?

当我 运行 服务器本身的命令时,我没有收到任何错误。

您部署的目标机器似乎对 VP_SECRET_KEY 环境变量一无所知。如果您愿意,可以在提供阶段进行设置。

在您的 settings.base 中,您从未设置的环境变量中获取 SECRET_KEY 配置参数。你应该在目标机器上设置它。示例:

export VP_SECRET_KEY="mysecretkey"