celery_beat relations not found by postgres using docker

m1m5dgzv  于 2023-08-03  发布在  Docker
关注(0)|答案(1)|浏览(161)

我有一个Django应用程序与Nginx,Gunicorn,PostgreSQL和Celery,我一直在码头化。当尝试在我的docker-compose.yml中添加celery_beat时,即使迁移已经成功运行,我也会得到一个django.db.utils.ProgrammingError: relation "django_celery_beat_periodictask" does not exist
在本地,启动celery_beat可以正常工作,但在这里它返回了这个错误,我不知道它可能来自哪里。Postgres似乎找不到关系django_celery_beat_periodictask,但它应该找到,因为迁移已经完成。我是不是误会了什么?
以下是我的docker-compose.yml

  1. version: '3.8'
  2. services:
  3. rabbitmq3:
  4. container_name: rabbitmq
  5. image: rabbitmq:3-alpine
  6. ports:
  7. - 5672:5672
  8. postgres:
  9. container_name: postgres
  10. hostname: postgres
  11. image: postgres:latest
  12. env_file:
  13. - env
  14. environment:
  15. - POSTGRES_USER=user
  16. - POSTGRES_PASSWORD=password
  17. - POSTGRES_DB=db
  18. ports:
  19. - "5432:5432"
  20. restart: on-failure
  21. volumes:
  22. - postgresql-data:/var/lib/postgresql/data
  23. django_gunicorn:
  24. container_name: django_gunicorn
  25. volumes:
  26. - static:/app/static
  27. - media:/app/media
  28. env_file:
  29. - env
  30. build:
  31. context: .
  32. ports:
  33. - "8000:8000"
  34. command: sh -c "python manage.py migrate && python manage.py collectstatic --no-input && gunicorn main.wsgi:application --bind 0.0.0.0:8000"
  35. depends_on:
  36. - postgres
  37. nginx:
  38. container_name: nginx
  39. build: ./nginx
  40. volumes:
  41. - .:/code
  42. - static:/static
  43. ports:
  44. - "80:80"
  45. depends_on:
  46. - django_gunicorn
  47. celery:
  48. container_name: celery
  49. volumes:
  50. - media:/app/media
  51. build:
  52. context: .
  53. command: celery -A main worker -P eventlet -c 100 -l INFO
  54. env_file:
  55. - env
  56. restart: always
  57. depends_on:
  58. - rabbitmq3
  59. - postgres
  60. - django_gunicorn
  61. celery_beat:
  62. container_name: celery_beat
  63. command: celery -A main beat --scheduler django_celery_beat.schedulers:DatabaseScheduler -l INFO
  64. build:
  65. context: .
  66. environment:
  67. - POSTGRES_USER=user
  68. - POSTGRES_PASSWORD=password
  69. - POSTGRES_DB=db
  70. restart: on-failure
  71. depends_on:
  72. - rabbitmq3
  73. - postgres
  74. - django_gunicorn
  75. volumes:
  76. postgresql-data:
  77. static:
  78. media:

字符串
完整的traceback:

  1. celery beat v5.2.7 (dawn-chorus) is starting.
  2. __ - ... __ - _
  3. LocalTime -> 2022-07-26 08:19:04
  4. Configuration ->
  5. . broker -> amqp://guest:**@rabbitmq3:5672//
  6. . loader -> celery.loaders.app.AppLoader
  7. . scheduler -> django_celery_beat.schedulers.DatabaseScheduler
  8. . logfile -> [stderr]@%INFO
  9. . maxinterval -> 5.00 seconds (5s)
  10. [2022-07-26 08:19:04,280: INFO/MainProcess] beat: Starting...
  11. [2022-07-26 08:19:04,293: CRITICAL/MainProcess] beat raised exception <class 'django.db.utils.ProgrammingError'>: ProgrammingError('relation "django_celery_beat_periodictask" does not exist\nLINE 1: ...ango_celery_beat_periodictask"."description" FROM "django_ce...\n ^\n')
  12. Traceback (most recent call last):
  13. File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
  14. return self.cursor.execute(sql, params)
  15. psycopg2.errors.UndefinedTable: relation "django_celery_beat_periodictask" does not exist
  16. LINE 1: ...ango_celery_beat_periodictask"."description" FROM "django_ce...
  17. ^
  18. The above exception was the direct cause of the following exception:
  19. Traceback (most recent call last):
  20. File "/usr/local/lib/python3.10/site-packages/celery/apps/beat.py", line 105, in start_scheduler
  21. service.start()
  22. File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 636, in start
  23. humanize_seconds(self.scheduler.max_interval))
  24. File "/usr/local/lib/python3.10/site-packages/kombu/utils/objects.py", line 30, in __get__
  25. return super().__get__(instance, owner)
  26. File "/usr/local/lib/python3.10/functools.py", line 981, in __get__
  27. val = self.func(instance)
  28. File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 679, in scheduler
  29. return self.get_scheduler()
  30. File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 670, in get_scheduler
  31. return symbol_by_name(self.scheduler_cls, aliases=aliases)(
  32. File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 228, in __init__
  33. Scheduler.__init__(self, *args, **kwargs)
  34. File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 271, in __init__
  35. self.setup_schedule()
  36. File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 236, in setup_schedule
  37. self.install_default_entries(self.schedule)
  38. File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 358, in schedule
  39. self._schedule = self.all_as_schedule()
  40. File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 242, in all_as_schedule
  41. for model in self.Model.objects.enabled():
  42. File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 320, in __iter__
  43. self._fetch_all()
  44. File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 1507, in _fetch_all
  45. self._result_cache = list(self._iterable_class(self))
  46. File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 57, in __iter__
  47. results = compiler.execute_sql(
  48. File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1361, in execute_sql
  49. cursor.execute(sql, params)
  50. File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute
  51. return self._execute_with_wrappers(
  52. File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
  53. return executor(sql, params, many, context)
  54. File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
  55. with self.db.wrap_database_errors:
  56. File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
  57. raise dj_exc_value.with_traceback(traceback) from exc_value
  58. File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
  59. return self.cursor.execute(sql, params)
  60. django.db.utils.ProgrammingError: relation "django_celery_beat_periodictask" does not exist
  61. LINE 1: ...ango_celery_beat_periodictask"."description" FROM "django_ce...
  62. ^
  63. [2022-07-26 08:19:04,296: WARNING/MainProcess] Traceback (most recent call last):
  64. [2022-07-26 08:19:04,296: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
  65. [2022-07-26 08:19:04,296: WARNING/MainProcess]
  66. [2022-07-26 08:19:04,296: WARNING/MainProcess] return self.cursor.execute(sql, params)
  67. [2022-07-26 08:19:04,297: WARNING/MainProcess] psycopg2.errors
  68. [2022-07-26 08:19:04,297: WARNING/MainProcess] .
  69. [2022-07-26 08:19:04,297: WARNING/MainProcess] UndefinedTable
  70. [2022-07-26 08:19:04,297: WARNING/MainProcess] :
  71. [2022-07-26 08:19:04,297: WARNING/MainProcess] relation "django_celery_beat_periodictask" does not exist
  72. LINE 1: ...ango_celery_beat_periodictask"."description" FROM "django_ce...
  73. ^
  74. [2022-07-26 08:19:04,297: WARNING/MainProcess]
  75. The above exception was the direct cause of the following exception:
  76. [2022-07-26 08:19:04,297: WARNING/MainProcess] Traceback (most recent call last):
  77. [2022-07-26 08:19:04,297: WARNING/MainProcess] File "/usr/local/bin/celery", line 8, in <module>
  78. [2022-07-26 08:19:04,298: WARNING/MainProcess]
  79. [2022-07-26 08:19:04,298: WARNING/MainProcess] sys.exit(main())
  80. [2022-07-26 08:19:04,298: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/__main__.py", line 15, in main
  81. [2022-07-26 08:19:04,298: WARNING/MainProcess]
  82. [2022-07-26 08:19:04,298: WARNING/MainProcess] sys.exit(_main())
  83. [2022-07-26 08:19:04,298: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/bin/celery.py", line 217, in main
  84. [2022-07-26 08:19:04,299: WARNING/MainProcess]
  85. [2022-07-26 08:19:04,299: WARNING/MainProcess] return celery(auto_envvar_prefix="CELERY")
  86. [2022-07-26 08:19:04,299: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
  87. [2022-07-26 08:19:04,299: WARNING/MainProcess]
  88. [2022-07-26 08:19:04,299: WARNING/MainProcess] return self.main(*args, **kwargs)
  89. [2022-07-26 08:19:04,300: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1055, in main
  90. [2022-07-26 08:19:04,300: WARNING/MainProcess]
  91. [2022-07-26 08:19:04,300: WARNING/MainProcess] rv = self.invoke(ctx)
  92. [2022-07-26 08:19:04,300: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
  93. [2022-07-26 08:19:04,301: WARNING/MainProcess]
  94. [2022-07-26 08:19:04,301: WARNING/MainProcess] return _process_result(sub_ctx.command.invoke(sub_ctx))
  95. [2022-07-26 08:19:04,301: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
  96. [2022-07-26 08:19:04,301: WARNING/MainProcess]
  97. [2022-07-26 08:19:04,302: WARNING/MainProcess] return ctx.invoke(self.callback, **ctx.params)
  98. [2022-07-26 08:19:04,302: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
  99. [2022-07-26 08:19:04,302: WARNING/MainProcess]
  100. [2022-07-26 08:19:04,302: WARNING/MainProcess] return __callback(*args, **kwargs)
  101. [2022-07-26 08:19:04,302: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
  102. [2022-07-26 08:19:04,302: WARNING/MainProcess]
  103. [2022-07-26 08:19:04,302: WARNING/MainProcess] return f(get_current_context(), *args, **kwargs)
  104. [2022-07-26 08:19:04,303: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/bin/base.py", line 134, in caller
  105. [2022-07-26 08:19:04,303: WARNING/MainProcess]
  106. [2022-07-26 08:19:04,303: WARNING/MainProcess] return f(ctx, *args, **kwargs)
  107. [2022-07-26 08:19:04,303: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/bin/beat.py", line 72, in beat
  108. [2022-07-26 08:19:04,304: WARNING/MainProcess]
  109. [2022-07-26 08:19:04,304: WARNING/MainProcess] return beat().run()
  110. [2022-07-26 08:19:04,304: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/apps/beat.py", line 77, in run
  111. [2022-07-26 08:19:04,304: WARNING/MainProcess]
  112. [2022-07-26 08:19:04,304: WARNING/MainProcess] self.start_scheduler()
  113. [2022-07-26 08:19:04,304: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/apps/beat.py", line 105, in start_scheduler
  114. [2022-07-26 08:19:04,305: WARNING/MainProcess]
  115. [2022-07-26 08:19:04,305: WARNING/MainProcess] service.start()
  116. [2022-07-26 08:19:04,305: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 636, in start
  117. [2022-07-26 08:19:04,305: WARNING/MainProcess]
  118. [2022-07-26 08:19:04,305: WARNING/MainProcess] humanize_seconds(self.scheduler.max_interval))
  119. [2022-07-26 08:19:04,305: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/kombu/utils/objects.py", line 30, in __get__
  120. [2022-07-26 08:19:04,305: WARNING/MainProcess]
  121. [2022-07-26 08:19:04,306: WARNING/MainProcess] return super().__get__(instance, owner)
  122. [2022-07-26 08:19:04,306: WARNING/MainProcess] File "/usr/local/lib/python3.10/functools.py", line 981, in __get__
  123. [2022-07-26 08:19:04,307: WARNING/MainProcess]
  124. [2022-07-26 08:19:04,307: WARNING/MainProcess] val = self.func(instance)
  125. [2022-07-26 08:19:04,307: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 679, in scheduler
  126. [2022-07-26 08:19:04,307: WARNING/MainProcess]
  127. [2022-07-26 08:19:04,307: WARNING/MainProcess] return self.get_scheduler()
  128. [2022-07-26 08:19:04,307: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 670, in get_scheduler
  129. [2022-07-26 08:19:04,308: WARNING/MainProcess]
  130. [2022-07-26 08:19:04,308: WARNING/MainProcess] return symbol_by_name(self.scheduler_cls, aliases=aliases)(
  131. [2022-07-26 08:19:04,308: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 228, in __init__
  132. [2022-07-26 08:19:04,308: WARNING/MainProcess]
  133. [2022-07-26 08:19:04,308: WARNING/MainProcess] Scheduler.__init__(self, *args, **kwargs)
  134. [2022-07-26 08:19:04,308: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/celery/beat.py", line 271, in __init__
  135. [2022-07-26 08:19:04,309: WARNING/MainProcess]
  136. [2022-07-26 08:19:04,309: WARNING/MainProcess] self.setup_schedule()
  137. [2022-07-26 08:19:04,309: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 236, in setup_schedule
  138. [2022-07-26 08:19:04,309: WARNING/MainProcess]
  139. [2022-07-26 08:19:04,309: WARNING/MainProcess] self.install_default_entries(self.schedule)
  140. [2022-07-26 08:19:04,309: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 358, in schedule
  141. [2022-07-26 08:19:04,309: WARNING/MainProcess]
  142. [2022-07-26 08:19:04,310: WARNING/MainProcess] self._schedule = self.all_as_schedule()
  143. [2022-07-26 08:19:04,310: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 242, in all_as_schedule
  144. [2022-07-26 08:19:04,310: WARNING/MainProcess]
  145. [2022-07-26 08:19:04,310: WARNING/MainProcess] for model in self.Model.objects.enabled():
  146. [2022-07-26 08:19:04,310: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 320, in __iter__
  147. [2022-07-26 08:19:04,310: WARNING/MainProcess]
  148. [2022-07-26 08:19:04,310: WARNING/MainProcess] self._fetch_all()
  149. [2022-07-26 08:19:04,310: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 1507, in _fetch_all
  150. [2022-07-26 08:19:04,311: WARNING/MainProcess]
  151. [2022-07-26 08:19:04,311: WARNING/MainProcess] self._result_cache = list(self._iterable_class(self))
  152. [2022-07-26 08:19:04,311: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 57, in __iter__
  153. [2022-07-26 08:19:04,311: WARNING/MainProcess]
  154. [2022-07-26 08:19:04,311: WARNING/MainProcess] results = compiler.execute_sql(
  155. [2022-07-26 08:19:04,311: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1361, in execute_sql
  156. [2022-07-26 08:19:04,312: WARNING/MainProcess]
  157. [2022-07-26 08:19:04,312: WARNING/MainProcess] cursor.execute(sql, params)
  158. [2022-07-26 08:19:04,312: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute
  159. [2022-07-26 08:19:04,312: WARNING/MainProcess]
  160. [2022-07-26 08:19:04,312: WARNING/MainProcess] return self._execute_with_wrappers(
  161. [2022-07-26 08:19:04,312: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
  162. [2022-07-26 08:19:04,313: WARNING/MainProcess]
  163. [2022-07-26 08:19:04,313: WARNING/MainProcess] return executor(sql, params, many, context)
  164. [2022-07-26 08:19:04,313: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
  165. [2022-07-26 08:19:04,313: WARNING/MainProcess]
  166. [2022-07-26 08:19:04,313: WARNING/MainProcess] with self.db.wrap_database_errors:
  167. [2022-07-26 08:19:04,313: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
  168. [2022-07-26 08:19:04,313: WARNING/MainProcess]
  169. [2022-07-26 08:19:04,313: WARNING/MainProcess] raise dj_exc_value.with_traceback(traceback) from exc_value
  170. [2022-07-26 08:19:04,314: WARNING/MainProcess] File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
  171. [2022-07-26 08:19:04,314: WARNING/MainProcess]
  172. [2022-07-26 08:19:04,314: WARNING/MainProcess] return self.cursor.execute(sql, params)
  173. [2022-07-26 08:19:04,314: WARNING/MainProcess] django.db.utils
  174. [2022-07-26 08:19:04,314: WARNING/MainProcess] .
  175. [2022-07-26 08:19:04,314: WARNING/MainProcess] ProgrammingError
  176. [2022-07-26 08:19:04,314: WARNING/MainProcess] :
  177. [2022-07-26 08:19:04,315: WARNING/MainProcess] relation "django_celery_beat_periodictask" does not exist
  178. LINE 1: ...ango_celery_beat_periodictask"."description" FROM "django_ce...


postgres返回以下错误:

  1. postgres | 2022-07-26 08:48:01.489 UTC [71] ERROR: relation "django_celery_beat_periodictask" does not exist at character 1078
  2. postgres | 2022-07-26 08:48:01.489 UTC [71] STATEMENT: SELECT "django_celery_beat_periodictask"."id", "django_celery_beat_periodictask"."name", "django_celery_beat_periodictask"."task", "django_celery_beat_periodictask"."interval_id", "django_celery_beat_periodictask"."crontab_id", "django_celery_beat_periodictask"."solar_id", "django_celery_beat_periodictask"."clocked_id", "django_celery_beat_periodictask"."args", "django_celery_beat_periodictask"."kwargs", "django_celery_beat_periodictask"."queue", "django_celery_beat_periodictask"."exchange", "django_celery_beat_periodictask"."routing_key", "django_celery_beat_periodictask"."headers", "django_celery_beat_periodictask"."priority", "django_celery_beat_periodictask"."expires", "django_celery_beat_periodictask"."expire_seconds", "django_celery_beat_periodictask"."one_off", "django_celery_beat_periodictask"."start_time", "django_celery_beat_periodictask"."enabled", "django_celery_beat_periodictask"."last_run_at", "django_celery_beat_periodictask"."total_run_count", "django_celery_beat_periodictask"."date_changed", "django_celery_beat_periodictask"."description"
  3. FROM "django_celery_beat_periodictask" WHERE "django_celery_beat_periodictask"."enabled"

编辑

我尝试在celery_beat容器中运行迁移,并成功启动。然而,它似乎没有链接到Celery或Django,因为在管理面板上设置一个周期性任务不会改变任何东西,也没有任务发送到Celery。
所以我认为问题在于celery_beat无法访问迁移...某处

编辑2

如果我尝试将celery_beat命令设置为celery -A main beat,那么它可以完美地工作。这个问题可能来自数据库调度程序的定义,但我不知道我应该把它改成什么。

7eumitmz

7eumitmz1#

我在celery 上也犯过类似的错误
我使用os.getenv()导出环境变量

  1. DATABASES = {
  2. "default": {
  3. "ENGINE": "django.db.backends.postgresql",
  4. "NAME": os.getenv("DATABASE_NAME"),
  5. "USER": os.getenv("DATABASE_USER"),
  6. "PASSWORD": os.getenv("DATABASE_PASSWORD"),
  7. "HOST": os.getenv("DATABASE_HOST"),
  8. "PORT": os.getenv("DATABASE_PORT"),
  9. }
  10. }

字符串
更改为decouple.config为我解决了这个问题

  1. from decouple import config
  2. DATABASES = {
  3. "default": {
  4. "ENGINE": "django.db.backends.postgresql",
  5. "NAME": config("DATABASE_NAME"),
  6. "USER": config("DATABASE_USER"),
  7. "PASSWORD": config("DATABASE_PASSWORD"),
  8. "HOST": config("DATABASE_HOST"),
  9. "PORT": config("DATABASE_PORT"),
  10. }
  11. }

展开查看全部

相关问题