I didn't use one. On Sat, Sep 13, 2014 at 12:26 AM, Jérôme Sivadier <[email protected]> wrote:
> Thanks for your answer. Could you post your gunicorn configuration file? I > have certainly made some errors in this part of my project :/ > > Le vendredi 12 septembre 2014 16:25:12 UTC+2, Stephen McDonald a écrit : >> >> I'm unable to reproduce this - works fine for me with the same gunicorn >> version. >> >> On Thu, Sep 11, 2014 at 6:40 PM, Jérôme Sivadier <[email protected]> >> wrote: >> >>> Hello, >>> >>> I've digged for one day to find what is the problem and here is an >>> interesting conclusion : Mezzanine was the problem because of >>> mezzanine.boot.lazy_admin. >>> Let me explain a bit : >>> >>> So I am using Mezzanine (3.0.10) + Gunicorn (19.1.1) and I discovered >>> model registration does not have the same behaviour using the built-in >>> Django webserver and using Gunicorn. Indeed when I use Gunicorn, all custom >>> models calling *admin.site.unregister* and then *admin.site.register* >>> (for instance *User*) are not updated in Django. >>> >>> After a lot of debugging (based on file writing), I realized that : >>> * On the first call of *admin.site.register(User, UserAdmin)* (by >>> Django), *django.contrib.admin.sites.AdminSite.register* is called and >>> then *mezzanine.boot.lazy_admin.LazyAdminSite.register(User, UserAdmin)* >>> * Then Mezzanine calls *admin.site.unregister(User)* but it doesn't go >>> to AdminSite.unregister, it only goes to LazyAdminSite.unregister >>> * After this, Mezzanine calls *admin.site.register(User, >>> UserProfileAdmin)* but it doesn't go to AdminSite.register, it goes >>> right to LazyAdminSite.register >>> ... >>> And so on. >>> >>> In the end, only Mezzanine's LazyAdminSite knows what is the "real" >>> admin model associated with the given model class but Django does not ! >>> Here is a trace of the register/unregister calls done by Mezzanine and >>> Django : >>> REGISTER <class 'django.contrib.auth.models.Group'> >>> MEZZANINE REGISTER <class 'django.contrib.auth.models.Group'> AS <class >>> 'django.contrib.auth.admin.GroupAdmin'> >>> calling super... >>> REGISTER <class 'django.contrib.auth.models.User'> >>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS <class >>> 'django.contrib.auth.admin.UserAdmin'> >>> calling super... >>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS <class >>> 'mezzanine.core.admin.SitePermissionUserAdmin'> >>> >>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS <class >>> 'mezzanine.accounts.admin.UserProfileAdmin'> >>> >>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS <class >>> 'bm_marketplace.admin.CustomUserProfileAdmin'> >>> >>> REGISTER <class 'django.contrib.redirects.models.Redirect'> >>> MEZZANINE REGISTER <class 'django.contrib.redirects.models.Redirect'> >>> AS <class 'django.contrib.redirects.admin.RedirectAdmin'> >>> calling super... >>> REGISTER <class 'django.contrib.sites.models.Site'> >>> MEZZANINE REGISTER <class 'django.contrib.sites.models.Site'> AS <class >>> 'django.contrib.sites.admin.SiteAdmin'> >>> calling super... >>> REGISTER <class 'mezzanine.conf.models.Setting'> >>> MEZZANINE REGISTER <class 'mezzanine.conf.models.Setting'> AS <class >>> 'mezzanine.conf.admin.SettingsAdmin'> >>> calling super... >>> REGISTER <class 'mezzanine.generic.models.ThreadedComment'> >>> MEZZANINE REGISTER <class 'mezzanine.generic.models.ThreadedComment'> >>> AS <class 'mezzanine.generic.admin.ThreadedCommentAdmin'> >>> calling super... >>> REGISTER <class 'mezzanine.pages.models.Page'> >>> MEZZANINE REGISTER <class 'mezzanine.pages.models.Page'> AS <class >>> 'mezzanine.pages.admin.PageAdmin'> >>> calling super... >>> REGISTER <class 'mezzanine.pages.models.RichTextPage'> >>> MEZZANINE REGISTER <class 'mezzanine.pages.models.RichTextPage'> AS < >>> class 'mezzanine.pages.admin.PageAdmin'> >>> calling super... >>> REGISTER <class 'mezzanine.pages.models.Link'> >>> MEZZANINE REGISTER <class 'mezzanine.pages.models.Link'> AS <class >>> 'mezzanine.pages.admin.LinkAdmin'> >>> calling super... >>> REGISTER = Django's AdminSite.register() >>> MEZZANINE REGISTER = Mezzanine's LazyAdminSite.register() >>> >>> >>> So I have tried to Monkey-patch LazyAdminSite.register() by calling >>> super on register and unregister and it basically works great on my >>> Gunicorn installation ! But I guess it will have embarrassing consequences? >>> Here's the working code of LazyAdminSite >>> def register(self, *args, **kwargs): >>> for name, deferred_args, deferred_kwargs in self._deferred: >>> if name == "unregister" and deferred_args[0] == args[0]: >>> self._deferred.append(("register", args, kwargs)) >>> break >>> #else: >>> super(LazyAdminSite, self).register(*args, **kwargs) >>> >>> def unregister(self, *args, **kwargs): >>> self._deferred.append(("unregister", args, kwargs)) >>> super(LazyAdminSite, self).unregister(*args, **kwargs) >>> >>> I can provide additional information / tests if needed. >>> >>> Thanks! >>> >>> >>> Le mercredi 10 septembre 2014 10:50:32 UTC+2, Jérôme Sivadier a écrit : >>> >>>> Hello, >>>> >>>> I am currently working on a website based on Django (1.6.7) + Mezzanine >>>> (3.1.10) and I am facing problems with the Admin side. >>>> In my application I have a custom User model (named BMUser) and I have >>>> declared it in *settings.py* like this : >>>> AUTH_PROFILE_MODULE = "myApp.BMUser" >>>> >>>> On the development side, everything works great but when I go on the >>>> production side (same code but I use postgres instead of sqlite and >>>> gunicorn) Mezzanine's *UserProfileAdmin* doesn't show up... I only get >>>> Django's UserAdmin which doesn't add a reference to "myApp.BMUser" at the >>>> bottom of the user management. >>>> >>>> I have *Mezzanine.accounts* in my INSTALLED_APPS (settings.py) and the >>>> configuration between development and production side seem to be the same. >>>> >>>> Any ideas? Thanks in advance ! >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Mezzanine Users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Stephen McDonald >> http://jupo.org >> > -- > You received this message because you are subscribed to the Google Groups > "Mezzanine Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Stephen McDonald http://jupo.org -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
