簡體   English   中英

將 Django 部署到 PythonAnywhere 並且無法使用環境變量中的 SECRET_KEY 盡管已設置

[英]Deploying Django to PythonAnywhere and cannot use SECRET_KEY from environment vars despite it being set

目前,我的錯誤日志除了這個錯誤之外什么都沒有:

Error running WSGI application 
KeyError: 'SECRET_KEY'
  File "/var/www/www_optranslations_net_wsgi.py", line 24, in <module>
    application = get_wsgi_application() 

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
    django.setup(set_prefix=False)

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 53, in __getattr__
    self._setup(name)

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
    self._wrapped = Settings(settings_module)

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 97, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)

  File "/home/optranslations/translation-site/optranslations/settings.py", line 24, in <module>
    SECRET_KEY = os.environ.get('SECRET_KEY')

  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/os.py", line 725, in __getitem__
    raise KeyError(key) from None

所以,據我所知,它找不到 SECRET_KEY 環境變量。 從 bash 終端和交互式 python 解釋器中的 os.environ 命令檢查,密鑰在那里正確設置。

此外,我嘗試了兩者:

SECRET_KEY = os.environ.get('SECRET_KEY')

和:

SECRET_KEY = os.getenv('SECRET_KEY')

在交互式 python 控制台中使用與打印相同的代碼生成正確的密鑰。

它按照 PythonAnywhere 的說明在我的 wsgi 文件中設置,如下所示:

os.environ["SECRET_KEY"] = 'secretkeyhere'

以及在我的 virtualenv 的 postactivate 文件中:

export SECRET_KEY="secretkeyhere"

發生什么了? 它只是不斷地在我的日志中吐出這個錯誤,我在網上找不到任何東西,甚至開始弄清楚它是什么。 不過,我確定這是我忽略的東西。 我可以添加您認為需要的更多代碼,所以請告訴我。

編輯

有趣的是,現在我得到了這個:

2017-02-15 07:46:27,883 :Error running WSGI application
2017-02-15 07:46:27,884 :django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
2017-02-15 07:46:27,884 :  File "/var/www/www_optranslations_net_wsgi.py", line 24, in <module>
2017-02-15 07:46:27,885 :    application = get_wsgi_application()
2017-02-15 07:46:27,885 :
2017-02-15 07:46:27,885 :  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
2017-02-15 07:46:27,885 :    django.setup(set_prefix=False)
2017-02-15 07:46:27,885 :
2017-02-15 07:46:27,885 :  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/__init__.py", line 22, in setup
2017-02-15 07:46:27,885 :    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
2017-02-15 07:46:27,885 :
2017-02-15 07:46:27,886 :  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 53, in __getattr__
2017-02-15 07:46:27,886 :    self._setup(name)
2017-02-15 07:46:27,886 :
2017-02-15 07:46:27,886 :  File "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
2017-02-15 07:46:27,886 :    self._wrapped = Settings(settings_module)
2017-02-15 07:46:27,886 :
2017-02-15 07:46:27,886 :  File    "/home/optranslations/.virtualenvs/optl/lib/python3.5/site-packages/django/conf/__init__.py", line 116, in __init__
2017-02-15 07:46:27,886 :    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")

所以現在它是 ImproperlyConfigured。 但是,我所做的只是停用我的 virtualenv 並重新加載它以再次激活 postactivate 腳本。 我仍然可以 echo $SECRET_KEY 並看到它很好(以及交互式控制台中的 getenv )。

我還嘗試通過運行以下命令來 django shell:

python manage.py shell
from django.conf import settings
print(settings.SECRET_KEY)

而且,當然,它打印出正確的密鑰。

好吧,結果證明答案很尷尬。 我的 WSGI 文件在這些行下面有我的 os.environ 聲明:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

他們必須在這些界限之上,而且它立即起作用,現在回想起來的原因顯而易見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM