Python 使用uWSGI的Django出现密钥错误

Python 使用uWSGI的Django出现密钥错误,python,django,python-3.x,environment-variables,uwsgi,Python,Django,Python 3.x,Environment Variables,Uwsgi,我试图用uWSGI运行一个Python3 Django应用程序,但遇到了问题 我将uWSGI作为守护进程运行: $ sudo service uwsgi start 我使用的文件如下所示: [uwsgi] chdir = /home/ubuntu/my_app module = my_app.wsgi # path below is to virtual environment home = /home/ubuntu/my_app/env http = :8000 check-static

我试图用uWSGI运行一个Python3 Django应用程序,但遇到了问题

我将uWSGI作为守护进程运行:

$ sudo service uwsgi start
我使用的文件如下所示: [uwsgi]

chdir = /home/ubuntu/my_app
module = my_app.wsgi
# path below is to virtual environment
home = /home/ubuntu/my_app/env 
http = :8000
check-static = /var/www/my_app
daemonize = /var/log/uwsgi/my_app

# process-related settings
master = true
processes = 10
vacuum = true
我得到了以下令人费解的错误:

mapped 800360 bytes (781 KB) for 10 cores
*** Operational MODE: preforking ***
Traceback (most recent call last):
  File "./titlematch_api/wsgi.py", line 14, in <module>
    application = get_wsgi_application()
  File "/home/ubuntu/titlematch_api/env/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
  File "/home/ubuntu/titlematch_api/env/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/home/ubuntu/titlematch_api/env/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/home/ubuntu/titlematch_api/env/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/ubuntu/titlematch_api/env/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "./titlematch_api/settings.py", line 20, in <module>
    SECRET_KEY = os.environ['SECRET_KEY']
  File "/usr/lib/python3.4/os.py", line 631, in __getitem__
    raise KeyError(key) from None
KeyError: 'SECRET_KEY'
为10个核心映射800360字节(781 KB)
***操作模式:预工作***
回溯(最近一次呼叫最后一次):
文件“/titlematch_api/wsgi.py”,第14行,在
application=get\u wsgi\u application()
文件“/home/ubuntu/titlematch_api/env/lib/python3.4/site packages/django/core/wsgi.py”,第14行,在get_wsgi_应用程序中
django.setup()
文件“/home/ubuntu/titlematch_api/env/lib/python3.4/site packages/django/__init___;.py”,第17行,在安装程序中
配置日志记录(settings.logging\u CONFIG,settings.logging)
文件“/home/ubuntu/titlematch_api/env/lib/python3.4/site packages/django/conf/__init___.py”,第48行,在__
自我设置(名称)
文件“/home/ubuntu/titlematch_api/env/lib/python3.4/site packages/django/conf/__init___;.py”,第44行,在安装程序中
自包装=设置(设置模块)
文件“/home/ubuntu/titlematch_api/env/lib/python3.4/site packages/django/conf/_init__.py”,第92行,在_init中__
mod=importlib.import\u模块(自我设置\u模块)
文件“/usr/lib/python3.4/importlib/_init_uuu.py”,第109行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“/titlematch_api/settings.py”,第20行,在
SECRET\u KEY=os.environ['SECRET\u KEY']
文件“/usr/lib/python3.4/os.py”,第631行,在__
从“无”提升钥匙错误(钥匙)
KeyError:“机密密钥”

我已经为我的当前用户和root用户设置了
SECRET\u KEY
环境变量,并且我可以在python shell中成功执行
os.environ['SECRET\u KEY']

因为您的环境是在uwsgi无权访问的~/.bashrc本地设置的

你也许可以把变量放在
/etc/rc.local
中,但我甚至不确定这是否有效

您可以将它们添加到您的文件中

[uwsgi]
chdir = /home/ubuntu/my_app
module = my_app.wsgi
# path below is to virtual environment
home = /home/ubuntu/my_app/env 
http = :8000
check-static = /var/www/my_app
daemonize = /var/log/uwsgi/my_app

# process-related settings
master = true
processes = 10
vacuum = true

#environment
env=SECRET_KEY="My Super Secret Key"
或者,您可以直接在python文件中的app对象上配置它

app = Flask(__name__)
app.secret_key="My Super Secret Key"

坦率地说,这可能是我在您的uwsgi ini配置中执行此操作的方式:

env=SECRETKEY=$(SECRETKEY)
^^^这将指示uwsgi获取SECRETKEY env var,并确保在它创建的分叉进程中设置它