Я пытаюсь настроить свой сервер с nginx на uwsgi на стек django, но у меня проблемы с частью uwsgi.
Когда я запускаю uwsgi и передаю все параметры в командной строке, он работает правильно. Мой вызов uwsgi выглядит так:
uwsgi --socket /tmp/uwsgi.sock --chdir ~/web/test.com --wsgi-file ~/web/test.com/store/wsgi.py --virtualenv ~/web/test.com/testenv --chmod-socket=666 --enable-threads
Затем я скопировал эти параметры в файл ini, который выглядит так:
# django.ini file
[uwsgi]
master = true
socket = /tmp/uwsgi.sock
chmod-socket = 666
chdir = /home/ubuntu/web/test.com
wsgi_file = /home/ubuntu/web/test.com/store/wsgi.py
virtualenv = /home/ubuntu/web/test.com/causumptionenv
vacuum = true
enable-threads = true
Однако, когда я запускаю uwsgi с файлом django.ini, я получаю такой результат.
[uWSGI] getting INI configuration from django.ini
*** Starting uWSGI 1.9.11 (64bit) on [Fri May 31 14:52:44 2013] ***
compiled with version: 4.6.3 on 30 May 2013 15:40:11
os: Linux-3.2.0-40-virtual #64-Ubuntu SMP Mon Mar 25 21:42:18 UTC 2013
nodename: ip-10-245-64-211
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/ubuntu/web/test.com
detected binary path: /usr/local/bin/uwsgi
your processes number limit is 4594
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 3
Python version: 2.7.3 (default, Aug 1 2012, 05:25:23) [GCC 4.6.3]
Set PythonHome to /home/ubuntu/web/test.com/testenv
Python main interpreter initialized at 0xcb4dd0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145440 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 15976)
spawned uWSGI worker 1 (pid: 15977, cores: 1)
--- no python application found, check your startup logs for errors ---
Наиболее заметны строки "приложение не загружено. идет в полном динамическом режиме и приложение python не найдено, проверьте журналы запуска на наличие ошибок
Итак, мой вопрос: в чем разница между передачей параметров в командной строке и передачей их через ini-файл?
Это wsgi-файл, а не wsgi_file, параметры командной строки и параметры файла всегда одинаковы
Чтобы добавить к общей путанице, связанной с uwsgi и django, вот файл ini, который мне подходит.
Он работает с http и http-socket, но НЕ с сокетом.
он предназначен для работы с несколькими файлами настроек в каталоге settings a'la двумя ложками нескольких файлов развертывания django (вот почему я тестировал)
Итак --- / velocity - это «домашний» каталог проекта, в котором находится manage.py. /velocity/velocity/settings/dev_settings_chris_l.py - это фактический файл настроек
Все это нужно сделать, потому что вам нужно иметь возможность управлять правильными файлами настроек вне кода django и, следовательно, не может быть строк, устанавливающих DJANGO_SETTINGS_MODULE внутри wsgi.py или действительно manage.py (используйте django-admin)
Об этом много говорят с сообщениями об ошибках. Надеюсь, хотя вы не совсем относитесь к вопросу, это может кому-то помочь.
Django 1.8
[uwsgi]
http-socket = 127.0.0.1:8004
buffer-size = 32768
processes = 4
threads = 2
pythonpath = ..
env = DJANGO_SETTINGS_MODULE=velocity.settings.dev_chris_l
module=velocity.wsgi:application
home = /home/chris/.virtualenvs/velocity
plugin = python,http
show-config
stats = 127.0.0.1:9191
chdir = /home/chris/development/webfuels/velocity
aptitude install uwsgi-plugin-python
а затем перезапустите uwsgi, вы увидите правильную страницу.
Проверьте, удалили ли вы какие-либо __init__.py
файл из приложений Django. Поскольку Django использует их, чтобы узнать, какие папки являются приложениями, они важны.