【问题标题】:Uwsgi: doesn't work with django's settings as a packageUwsgi:不适用于 django 的设置作为包
【发布时间】:2015-09-15 07:42:43
【问题描述】:

我正在尝试使用包拆分 django 的设置,对this 文章印象深刻。

我的问题是 uwsgi 无法识别我的 project.settings 包。

[一些歌词] 使用 secrets.py 我稍微修改了结构,所以除了 secrets.py 之外的所有文件都存储在 github 中,而 secret.py 由 ansible 管理。

所以我现在的设置是一个具有以下结构的包:

project/
├── manage.py
└── project
    ├── __init__.py
    ├── settings
    │   ├── __init__.py
    │   ├── defaults.py
    │   ├── development.py
    │   ├── production.py
    │   ├── staging.py
    │   └── secrets.py
    ├── urls.py
    └── wsgi.py

重要文件内容:

settings/__init__.py

# Appropriate config load based on DJANGO_ENVIRONMENT env 
# variable, which set at system boot

ENVIRONMENT = os.getenv("DJANGO_ENVIRONMENT")

if ENVIRONMENT == "production":
    from production import *
elif ENVIRONMENT == "staging":
    from staging import *
elif ENVIRONMENT == "development":
    from development import *

settings/development.py

from .defaults import *

DEBUG = True

INSTALLED_APPS += (
    'debug_toolbar',
)

settings/defaults.py

import os
import secrets

SECRET_KEY = secrets.SECRET_KEY

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': secrets.DATABASE_NAME,
        'USER': secrets.DATABASE_USER,
        'PASSWORD': secrets.DATABASE_PASSWORD,
        'HOST': 'localhost',
        'PORT': '',
    }
}

# and so on, almost default

settings/secrets.py

SECRET_KEY = '1YdCOUsWeKk&BWDa$PI6X1@IdUH5vjkjcB^v&k3J@*fRRVRPrW'

DATABASE_NAME = 'mydb'
DATABASE_USER = 'myuser'
DATABASE_PASSWORD = '1l3S7KURpd1MYPOr'

DJANGO_ENVIRONMENT

$ echo $DJANGO_ENVIRONMENT
development

------------------------------------------ ----------------------------------------

此时,我可以毫无问题地启动manage runservercheck

$ python manage.py check
System check identified no issues (0 silenced).

但是,如果我尝试使用 UWSGI,我会在 uwsgi-error.log 中得到错误(我的项目名称是 pdfupload):

[uwsgi-daemons] respawning "python /home/vagrant/pdfupload/manage.py rqworker default" (uid: 1000 gid: 1000)
Traceback (most recent call last):
  File "/home/vagrant/pdfupload/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 182, in fetch_command
    settings.INSTALLED_APPS
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

显然,由于导入错误,uwsgi 无法读取 django 的设置。

有uwsgi.ini:

[uwsgi]
chdir=/home/vagrant/pdfupload
master=True
disable-logging=False
chmod-socket = 777
chown-socket = vagrant

logto      = /home/vagrant/log/uwsgi.log
req-logger = file:/home/vagrant/log/uwsgi-access.log
logger     = file:/home/vagrant/log/uwsgi-error.log

vacuum=True
pidfile=/run/uwsgi/pdfupload.pid
max-requests=5000
socket=/run/uwsgi/pdfupload.socket
processes=2
harakiri=20

pythonpath=..
env=DJANGO_SETTINGS_MODULE=pdfupload.settings
module = django.core.wsgi:get_wsgi_application()
touch-reload=/tmp/pdfupload.reload

虚拟环境不使用。

请帮我完成这个设置。

【问题讨论】:

    标签: python django deployment settings uwsgi


    【解决方案1】:

    你的 DJANGO_SETTINGS_MODULE 必须指向实际的设置文件,所以在你的情况下:

    pdfupload.settings.defaults (or whatever in your settings folder)
    

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 1970-01-01
      • 2014-01-20
      • 2020-07-28
      • 2011-03-12
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多