Heroku部署Django时collectstatic报错:SECRET_KEY未找到如何解决?
解决Heroku部署Django时collectstatic的SECRET_KEY错误
在Heroku部署Django应用过程中,执行命令python manage.py collectstatic --noinput时出现以下错误:
$ python manage.py collectstatic --noinput Traceback (most recent call last): File "/tmp/build_01f62511/manage.py", line 22, in <module> main() File "/tmp/build_01f62511/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line utility.execute() File "/app/.heroku/python/lib/python3.10/site-packages/django/core/management/__init__.py", line 386, in execute settings.INSTALLED_APPS File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 92, in __getattr__ self._setup(name) File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 79, in _setup self._wrapped = Settings(settings_module) File "/app/.heroku/python/lib/python3.10/site-packages/django/conf/__init__.py", line 190, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/app/.heroku/python/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/tmp/build_01f62511/main/settings.py", line 25, in <module> SECRET_KEY = config("SECRET_KEY") File "/app/.heroku/python/lib/python3.10/site-packages/decouple.py", line 243, in __call__ return self.config(*args, **kwargs) File "/app/.heroku/python/lib/python3.10/site-packages/decouple.py", line 105, in __call__ return self.get(*args, **kwargs) File "/app/.heroku/python/lib/python3.10/site-packages/decouple.py", line 90, in get raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option)) decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value. ! Error while running '$ python manage.py collectstatic --noinput'. See traceback above for details. You may need to update application code to resolve this error. Or, you can disable collectstatic for this application: $ heroku config:set DISABLE_COLLECTSTATIC=1 ! Push rejected, failed to compile Python app. ! Push failed
解决方法
配置Heroku环境变量(生产环境推荐)
在本地终端执行以下命令,将你的Django SECRET_KEY添加到Heroku环境变量中:heroku config:set SECRET_KEY="你的Django密钥"密钥可使用本地settings.py中原有的值,或通过Django的
get_random_secret_key()函数生成新的安全密钥。给config函数设置默认值(仅测试环境使用)
修改settings.py中的SECRET_KEY获取逻辑,添加默认值:SECRET_KEY = config("SECRET_KEY", default="你的临时默认密钥")注意:生产环境禁用此方式,默认密钥会带来安全风险。
临时禁用collectstatic(不推荐长期使用)
若需临时跳过静态文件收集步骤,可执行:heroku config:set DISABLE_COLLECTSTATIC=1此为临时方案,长期部署仍需正确配置静态文件与环境变量。
内容的提问来源于stack exchange,提问作者fuatsevinc
相关产品推荐
相关产品推荐

