celery: 简单、灵活、可靠的分布式定时任务库
django_celery_results: 存储celery执行结果的库
Django_celery_beat: 周期性定时任务库
安装依赖
poetry add celery django_celery_results django_celery_beat
报错如下
❯ python manage.py migrate django_celery_beat
Traceback (most recent call last):
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zoneinfo/_common.py", line 12, in load_tzdata
return importlib.resources.open_binary(package_name, resource_name)
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/resources.py", line 46, in open_binary
return reader.open_resource(resource)
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/abc.py", line 433, in open_resource
return self.files().joinpath(resource).open('rb')
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/pathlib.py", line 1119, in open
return self._accessor.open(self, mode, buffering, encoding, errors,
FileNotFoundError: [Errno 2] No such file or directory: '/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/tzdata/zoneinfo/Asia/Hanoi'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/manage.py", line 22, in <module>
main()
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 420, in execute
django.setup()
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django/apps/registry.py", line 116, in populate
app_config.import_models()
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django/apps/config.py", line 304, in import_models
self.models_module = import_module(models_module_name)
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/django_celery_beat/models.py", line 8, in <module>
import timezone_field
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/timezone_field/__init__.py", line 1, in <module>
from timezone_field.fields import TimeZoneField
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/timezone_field/fields.py", line 11, in <module>
class TimeZoneField(models.Field):
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/timezone_field/fields.py", line 41, in TimeZoneField
default_zoneinfo_tzs = [ZoneInfo(tz) for tz in pytz.common_timezones]
File "/Users/xxx/Work/projects/xiaomi/ibn-quality/ibn-quality-be/.venv/lib/python3.10/site-packages/timezone_field/fields.py", line 41, in <listcomp>
default_zoneinfo_tzs = [ZoneInfo(tz) for tz in pytz.common_timezones]
File "/usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zoneinfo/_common.py", line 24, in load_tzdata
raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key Asia/Hanoi'
关键信息:zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key Asia/Hanoi'
报错原因
点击查看beat的一个bug
默认使用poetry add django_celery_beat
安装时,pytz
版本默认为2022.2
,这个版本有bug
,官方于2022年8月12日
修复,建议安装pytz<2022.2
版本
解决办法
- 先检查已安装的
pytz
版本 - 已确认当前安装的是2022.2
(中招) - 回退或更新
pytz
版本- 去
pypi
查看当前pytz
的最新版本,发现最新版本为2022.2.1
- 于是尝试更新
pytz
版本,发现同样能解决问题
- 去
python manage.py migrate django_celery_beat
python manage.py migrate django_celery_results
- 检查数据库中是否有新增表成功