跨不同容器接收Django信号

2024-04-18 17:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个Django项目,在处理不同容器的信号时遇到了一些问题。你知道吗

我有一个连接到上游数据管道并填充Django数据库的第一个容器。我有一个用于后端本身的其他容器,我正在其上运行服务器。我想用信号“后保存”的信号,我的应用程序之一,一个新的模型实例已保存。因此,我使用应用程序中的下一段代码来接收此信号并处理已保存的实例。你知道吗

@receiver(post_save, sender=Organization)
def index_post_save(sender, instance, **kwargs):
    connections.create_connection(hosts=['elasticsearch'])  
    instance.indexing()

如果我在Django管理界面上手动创建一个Organization实例,那么这将非常有效,但是在用第一个容器填充数据库时,不会收到信号。你知道吗

以下是docker compose文件的一部分,其中包含我描述的两个容器:

worker:
   build:
      context: .
      dockerfile: Dockerfile
   command: ./run_celery.sh
   env_file:
      - ./.envs/.local/.workers
   volumes:
      - .:/app

web:
   restart: always
   build:
     context: .
     dockerfile: Dockerfile
   hostname: web
   command: /app/run_web.sh
   env_file:
     - ./.envs/.local/.web
   volumes:
     - .:/app
   ports:
     - "80:8000"
   links:
     - db
     - pipeline_db
   depends_on:
     - db
     - pipeline_db
     - elasticsearch

有没有一种方法可以跨容器使用Django信号,或者我应该使用其他方法来发送和接收这些消息?你知道吗

谢谢


Tags: django实例instanceweb数据库app应用程序db
1条回答
网友
1楼 · 发布于 2024-04-18 17:15:18

等等什么?这些信号只在django项目中工作,一个信号可以到达的最外部点是在方法内部运行save()命令并检查数据库是否保存了它。。。你知道吗

你所能做的就是在你的终端上运行一些python代码,或者API,或者socket,或者任何你想说的通信。你知道吗

所以给一个镜头,你可以使一个API到你的管道上游(我不知道它是什么)能够接收一些POST或GET方法,并设置你的后端发送一个请求到你的应用程序(在其他容器)接收数据,你想要的。。。您可以使用requestscurl

我认为你正在使用两个不同的容器服务器

相关问题 更多 >