【问题标题】:SECRET_KEY error with Django using uWSGI使用 uWSGI 的 Django 的 SECRET_KEY 错误
【发布时间】:2015-08-26 10:58:10
【问题描述】:

我正在尝试使用 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']

【问题讨论】:

    标签: python django python-3.x environment-variables uwsgi


    【解决方案1】:

    你不能真正做到这一点,因为你的环境是在本地 ~/.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对象上配置它

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

    坦率地说,我可能会这样做

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-08-31
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2016-02-16
        • 2018-08-11
        • 2014-08-03
        相关资源
        最近更新 更多