У меня есть система, в которой мне нужен полный динамический контроль URL-адресов, как до, так и после запроса.Model.py не загружается при запуске с помощью uWSGI
Я использую сигналы для этого и для сигнала предварительного запроса (тот, с которым у меня возникают проблемы, у меня есть часть промежуточного программного обеспечения, подобное этому, которое подключается к сигналу, позволяет проверить, request.path относится к нему, а затем идет с первым он получает Это нормально работает нормально, и довольно элегантно):.
class PreRouteMiddleWare(object):
def process_request(self, request):
url = request.path.strip('/')
if url == '':
url = '/'
pre_routes = pre_route.send(sender=request, url=url)
for reciever, response in pre_routes:
if response:
return response
return None
Теперь, чтобы зарегистрировать то, что происходит «предварительно» стек маршрутизации Джанго, Я делаю что-то подобное в приложении :
@receiver(pre_route)
def try_things(sender, url, **kwargs):
try:
thing= Thing.objects.get(url=url)
from myapp.views import myview
return myview(sender, some_args)
except Thing.DoesNotExist:
return False
Что также отлично работает на моем dev-сервере.
Однако проблема возникает в производстве, где я использую uWSGI. Я начинаю uWSGI (от выскочки), как это:
sudo /usr/local/bin/uwsgi --emperor '/srv/*/uwsgi.ini' --enable-threads --single-interpreter
И мой uwsgi.ini выглядит следующим образом:
[uwsgi]
socket = /srv/new/uwsgi.sock
module = wsgi:app
chdir = /srv/new/myapp
virtualenv = /srv/new
env = DJANGO_SETTINGS_MODULE=myapp.settings
uid = wsgi_new
gid = www-data
chmod = 770
processes = 2
Что, кажется, происходит для каждого процесса uWSGI/нить, они только кажутся load models.py по первому запросу, что означает, что первый запрос для каждого процесса не сможет подключить сигналы. Это означает, что у меня есть n (где n - количество процессов) запросы завершаются полностью, потому что models.py не загружается при запуске (как это происходит в процессе разработки).
Я настраиваю uWSGI неправильно? Есть ли лучший способ заставить сигналы подключаться при запуске?