Skip to content

Commit

Permalink
Django. Embedded mode support improved
Browse files Browse the repository at this point in the history
  • Loading branch information
idlesign committed Sep 15, 2019
1 parent 9f5a71b commit c2c7ca1
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 11 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ uwsgiconf changelog
===================


Unreleased
----------
* Django. Embedded mode support improved.


v0.17.0
-------
! Dropped QA for Python 2.
Expand Down
16 changes: 16 additions & 0 deletions uwsgiconf/contrib/django/uwsgify/config.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
from django.utils.translation import gettext_lazy as _

from .settings import MODULE_INIT


class UwsgifyConfig(AppConfig):

name = 'uwsgiconf.contrib.django.uwsgify'
verbose_name = _('uWSGI Integration')

def ready(self):

try:
import uwsgi

# This will handle init modules discovery for non-embedded.
# Part for embedding is done in toolbox.SectionMutator.mutate
# via in master process import.
autodiscover_modules(MODULE_INIT)

except ImportError:
pass
22 changes: 15 additions & 7 deletions uwsgiconf/contrib/django/uwsgify/toolbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,24 +249,32 @@ def mutate(self, embedded=False):

main = section.main_process

# The following should prevent possible segfaults in uwsgi_set_processname()'s memsets
# while embedded.
if embedded:

# The following should prevent possible segfaults in uwsgi_set_processname()'s memsets
# while embedded.
main.set_naming_params(autonaming=False)

# Applications registry is ready by now,
# we import base uwsgiinit in master process to bootstrap.
section.python.import_module(
'uwsgiconf.contrib.django.uwsgify.uwsgiinit',
shared=True,
)

else:
main.set_naming_params(prefix='[%s] ' % project_name)

section.print_out(
'Embedded mode: %s' % ('yes' if embedded else 'no'),
format_options='blue')

main.set_pid_file(
self.get_pid_filepath(),
before_priv_drop=False, # For vacuum to cleanup properly.
safe=True,
)

section.python.import_module(
'uwsgiconf.contrib.django.uwsgify.uwsgiinit',
shared=True,
)

section.master_process.set_basic_params(
fifo_file=self.get_fifo_filepath(),
)
Expand Down
11 changes: 7 additions & 4 deletions uwsgiconf/contrib/django/uwsgify/uwsgiinit.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import unicode_literals

from django import db
from django.apps import apps
from django.utils.module_loading import autodiscover_modules

from uwsgiconf import uwsgi
Expand Down Expand Up @@ -34,14 +35,16 @@ def check_for_stub():
check_for_stub()


# Import uWSGI init modules from applications.
autodiscover_modules(MODULE_INIT)


from uwsgiconf.runtime.platform import uwsgi


@uwsgi.postfork_hooks.add()
def db_close_connections():
"""Close db connections after fork()."""
db.connections.close_all()


if apps.apps_ready:
# Only for embedded mode. For non-embedded see UwsgifyConfig.ready()
# Import uWSGI init modules from applications.
autodiscover_modules(MODULE_INIT)

0 comments on commit c2c7ca1

Please sign in to comment.