SECRET_KEY 使用 uWSGI 的 Django 出错
SECRET_KEY error with Django using uWSGI
我正在尝试 运行 带有 uWSGI 的 Python 3 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'
我已经为我的当前用户和 root 设置了 SECRET_KEY
环境变量,我可以在 python shell 中成功执行 os.environ['SECRET_KEY']
。
你不能真正做到这一点,因为你的环境是在本地 ~/.bashrc 中设置的,uwsgi 无法访问它。
您可以将变量放在 /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 = Flask(__name__)
app.secret_key="My Super Secret Key"
坦率地说,我可能会这样做
在你的 uwsgi ini 配置中:
env = SECRETKEY=$(SECRETKEY)
^^^ 这将指示 uwsgi 获取 SECRETKEY env var 并确保在它创建的分叉进程中设置它
我正在尝试 运行 带有 uWSGI 的 Python 3 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'
我已经为我的当前用户和 root 设置了 SECRET_KEY
环境变量,我可以在 python shell 中成功执行 os.environ['SECRET_KEY']
。
你不能真正做到这一点,因为你的环境是在本地 ~/.bashrc 中设置的,uwsgi 无法访问它。
您可以将变量放在 /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 = Flask(__name__)
app.secret_key="My Super Secret Key"
坦率地说,我可能会这样做
在你的 uwsgi ini 配置中:
env = SECRETKEY=$(SECRETKEY)
^^^ 这将指示 uwsgi 获取 SECRETKEY env var 并确保在它创建的分叉进程中设置它