celery / django-celery-beat

Celery Periodic Tasks backed by the Django ORM
Other
1.68k stars 428 forks source link

Not compatible with celery 5.0.0 #364

Closed he0119 closed 3 years ago

he0119 commented 4 years ago

Summary:

When go to admin periodictask page, these is an error.

Exact steps to reproduce the issue:

  1. Login to admin page
  2. Click Periodic tasks
  3. Boom

Detailed information

LOGS

Environment: Request Method: GET Request URL: http://localhost:8000/admin/django_celery_beat/periodictask/ Django Version: 3.1.1 Python Version: 3.8.5 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'user_sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'mptt', 'import_export', 'graphene_django', 'django_celery_beat', 'storage', 'board', 'xiaoai', 'iot', 'corsheaders'] Installed Middleware: ['corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'user_sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback (most recent call last): File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\contrib\admin\options.py", line 614, in wrapper return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\contrib\admin\sites.py", line 233, in inner return view(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\admin.py", line 156, in changelist_view extra_context['wrong_scheduler'] = not is_database_scheduler(scheduler) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\utils.py", line 42, in is_database_scheduler from .schedulers import DatabaseScheduler File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\schedulers.py", line 11, in from celery.utils.encoding import safe_str, safe_repr Exception Type: ModuleNotFoundError at /admin/django_celery_beat/periodictask/ Exception Value: No module named 'celery.utils.encoding'

mrteera commented 4 years ago

Same problem here

celery beat v5.0.0 (singularity) is starting.
Traceback (most recent call last):
  File "/home/teera/.pyenv/versions/3.8.4/bin/celery", line 8, in <module>
    sys.exit(main())
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/__main__.py", line 15, in main
    sys.exit(_main())
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/bin/celery.py", line 150, in main
    return celery(auto_envvar_prefix="CELERY")
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/bin/beat.py", line 70, in beat
    return beat().run()
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 77, in run
    self.start_scheduler()
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 96, in start_scheduler
    print(self.banner(service))
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 118, in banner
    c.reset(self.startup_info(service))),
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 128, in startup_info
    scheduler = service.get_scheduler(lazy=True)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/beat.py", line 653, in get_scheduler
    return symbol_by_name(self.scheduler_cls, aliases=aliases)(
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/django_celery_beat/schedulers.py", line 11, in <module>
    from celery.utils.encoding import safe_str, safe_repr
ModuleNotFoundError: No module named 'celery.utils.encoding'

https://github.com/celery/django-celery-beat/pull/365 https://github.com/celery/django-celery-beat/pull/363

perlcloud commented 4 years ago

Same issue when trying to set up: https://github.com/pydanny/cookiecutter-django

itmanagerkrim commented 4 years ago

Getting the same error.

drippypale commented 4 years ago

same error here.

Jitjo commented 4 years ago

fixed it by changing 'celery.utils.encoding' to 'kombu.utils.encoding'

tuky commented 4 years ago

if you need a quick local fix, you can monkey patch it in a high level init module:

import sys
from kombu.utils import encoding
sys.modules['celery.utils.encoding'] = encoding
samsonarita commented 4 years ago

'celery.utils.encoding' to 'kombu.utils.encoding'

This one worked for me.

robertpro commented 4 years ago

@tuky worked for me.

auvipy commented 4 years ago

should be fixed on master now, please check and let us know

tuky commented 4 years ago

thx @auvipy. the from kombu.utils.encoding import safe_str, safe_repr import now made it into schedulers.py twice.

galileoguzman commented 3 years ago

I'm getting the same error

    from celery.utils.encoding import safe_str, safe_repr
ModuleNotFoundError: No module named 'celery.utils.encoding'

When I run

celery -A proj beat -l INFO --scheduler django
celery -A proj beat -l INFO -S django

celery -A proj beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
celery -A proj beat -l INFO -S django_celery_beat.schedulers:DatabaseScheduler

But when I run

celery -A proj beat -l INFO

The result is

LocalTime -> 2020-10-15 22:16:10
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%INFO
    . maxinterval -> 5.00 minutes (300s)
[2020-10-15 22:16:10,468: INFO/MainProcess] beat: Starting...

Even though I set the beat_scheduler setting with django_celery_beat.schedulers:DatabaseScheduler. The settings in lowecase do not work by the way.

I have the same stack @he0119 has.

Tjorriemorrie commented 3 years ago

Commenting this out gives no error: # CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

ckleemann commented 3 years ago

@auvipy This fix works for me. Are there any plans to release a new version on pypi which fix this bug?

auvipy commented 3 years ago

v2.1.0 is now on pypi

ckleemann commented 3 years ago

v2.1.0 works with Celery v5.0.0 in my setup the issue is resolved and can be closed.

m3nu commented 3 years ago

Also updated and the combo works fine.