2017-02-15 41 views
2

目前,我的錯誤日誌吐出什麼,但這個錯誤:部署的Django到PythonAnywhere,不能從環境中使用SECRET_KEY瓦爾儘管它被設置

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環境變量。 從交互式Python解釋器中的bash終端和os.environ命令中檢查密鑰是否正確設置在那裏。

而且,我都嘗試:

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

和:

SECRET_KEY = os.getenv('SECRET_KEY') 

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

,它是在我的WSGI文件設置爲每PythonAnywhere的指示,像這樣:

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

還有在我postactivate文件爲我的virtualenv:

export SECRET_KEY="secretkeyhere" 

那麼,這是怎麼回事?它只是不斷在我的日誌中吐出這個錯誤,我在網上找不到任何東西,甚至不知道它是什麼。不過,我確定這是我所忽視的。我可以添加你認爲是必需的代碼,所以請讓我知道。所以現在ImproperlyConfigured

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.") 

編輯

有趣,現在我就在此。但是,我所做的全部都是關閉了我的virtualenv並重新加載它以再次激活postactivate腳本。我仍然可以回顯$ SECRET_KEY並且看到它很好(在交互式控制檯中也可以看到getenv)。

我也試圖通過運行Django的外殼下面:

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

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

回答

1

那麼,答案原來是尷尬的。我WSGI文件有我os.environ聲明低於這些行:

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

他們必須高於線路,並立即對工作,現在就可以回頭明顯的原因。

相關問題