Skip to content

Compatibility with django-celery-beat #409

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
dgilge opened this issue Jul 3, 2019 · 1 comment
Open

Compatibility with django-celery-beat #409

dgilge opened this issue Jul 3, 2019 · 1 comment

Comments

@dgilge
Copy link

dgilge commented Jul 3, 2019

I have installed both, django-uwsgi and django-celery-beat, but they cause a bug when I want to change periodic tasks in the admin panel: http://localhost:8001/admin/django_celery_beat/periodictask/1/change/

I disabled django-uwsgi for now but I'd be happy to use it again when this is fixed. (Sorry, but I don't see a way to figure out what causes this.)

Installed:

Package Name Version
Django   2.0.13
Python   3.6.8
allauth Allauth 0.36.0.final.0
cachalot Cachalot 2.1.0
crispy_forms Crispy_Forms 1.7.2
debug_toolbar Debug Toolbar 2.0
django_celery_beat Periodic Tasks 1.5.0
django_extensions Django_Extensions 2.1.9
django_filters Django_Filters 2.1.0
django_uwsgi uWSGI for Django 0.2.2
drf_yasg Drf_Yasg 1.16.0
guardian Guardian 2.0.0
imagekit Imagekit 4.0.2
rest_framework Django REST framework 3.9.4
simple_history Simple_History 2.7.2
celery==4.3.0
kombu==4.6.3

Traceback:

KeyError: '_modules'
  File "kombu/utils/objects.py", line 42, in __get__
    return obj.__dict__[self.__name__]

Exception: you have to enable the uWSGI spooler to use @_spool decorator
  File "django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "django/contrib/admin/options.py", line 575, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "django/contrib/admin/sites.py", line 223, in inner
    return view(request, *args, **kwargs)
  File "django/contrib/admin/options.py", line 1557, in change_view
    return self.changeform_view(request, object_id, form_url, extra_context)
  File "django/utils/decorators.py", line 62, in _wrapper
    return bound_func(*args, **kwargs)
  File "django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "django/utils/decorators.py", line 58, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "django/contrib/admin/options.py", line 1451, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "django/contrib/admin/options.py", line 1508, in _changeform_view
    form = ModelForm(instance=obj)
  File "django/forms/models.py", line 301, in __init__
    label_suffix, empty_permitted, use_required_attribute=use_required_attribute,
  File "django/forms/forms.py", line 95, in __init__
    self.fields = copy.deepcopy(self.base_fields)
  File "python3.6/copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "python3.6/copy.py", line 306, in _reconstruct
    value = deepcopy(value, memo)
  File "python3.6/copy.py", line 161, in deepcopy
    y = copier(memo)
  File "django/forms/fields.py", line 761, in __deepcopy__
    result = super().__deepcopy__(memo)
  File "django/forms/fields.py", line 203, in __deepcopy__
    result.widget = copy.deepcopy(self.widget, memo)
  File "python3.6/copy.py", line 161, in deepcopy
    y = copier(memo)
  File "django/forms/widgets.py", line 563, in __deepcopy__
    obj.choices = copy.copy(self.choices)
  File "django_celery_beat/admin.py", line 44, in choices
    self._choices = self.tasks_as_choices()
  File "django_celery_beat/admin.py", line 36, in tasks_as_choices
    _ = self._modules  # noqa
  File "kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "django_celery_beat/admin.py", line 55, in _modules
    self.celery_app.loader.import_default_modules()
  File "celery/loaders/base.py", line 108, in import_default_modules
    raise response
  File "celery/utils/dispatch/signal.py", line 288, in send
    response = receiver(signal=self, sender=sender, **named)
  File "vine/promises.py", line 170, in __call__
    return self.throw()
  File "vine/promises.py", line 167, in __call__
    retval = fun(*final_args, **final_kwargs)
  File "celery/app/base.py", line 680, in _autodiscover_tasks
    return self._autodiscover_tasks_from_fixups(related_name)
  File "celery/app/base.py", line 693, in _autodiscover_tasks_from_fixups
    ], related_name=related_name)
  File "celery/app/base.py", line 685, in _autodiscover_tasks_from_names
    packages() if callable(packages) else packages, related_name,
  File "celery/loaders/base.py", line 224, in autodiscover_tasks
    related_name) if mod)
  File "celery/loaders/base.py", line 249, in autodiscover_tasks
    return [find_related_module(pkg, related_name) for pkg in packages]
  File "celery/loaders/base.py", line 249, in <listcomp>
    return [find_related_module(pkg, related_name) for pkg in packages]
  File "celery/loaders/base.py", line 268, in find_related_module
    return importlib.import_module('{0}.{1}'.format(package, related_name))
  File "importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "django_uwsgi/tasks.py", line 13, in <module>
    @spool
  File "django_uwsgi/decorators.py", line 165, in spool
    return spool_decorate(f, pass_arguments, _spool)
  File "django_uwsgi/decorators.py", line 157, in spool_decorate
    return _class(f, pass_arguments)
  File "django_uwsgi/decorators.py", line 131, in __init__
    "you have to enable the uWSGI spooler to use @%s decorator" % self.__class__.__name__)
@MechanisM
Copy link
Collaborator

Hello @dgilge!

Exception: you have to enable the uWSGI spooler to use @_spool decorator

As I can see, you not enabled spooler in uwsgi config.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants