Python 跨不同容器接收Django信号
我目前正在从事Django项目,在处理不同容器中的信号时遇到一些问题 我有一个连接到上游数据管道并填充Django数据库的第一个容器。我有另一个用于后端本身的容器,我正在其上运行服务器。我想使用信号“保存后”来通知我的一个应用程序,新模型实例已保存。因此,我使用应用程序中的下一段代码来接收此信号并处理已保存的实例Python 跨不同容器接收Django信号,python,django,docker-compose,django-signals,Python,Django,Docker Compose,Django Signals,我目前正在从事Django项目,在处理不同容器中的信号时遇到一些问题 我有一个连接到上游数据管道并填充Django数据库的第一个容器。我有另一个用于后端本身的容器,我正在其上运行服务器。我想使用信号“保存后”来通知我的一个应用程序,新模型实例已保存。因此,我使用应用程序中的下一段代码来接收此信号并处理已保存的实例 @receiver(post_save, sender=Organization) def index_post_save(sender, instance, **kwargs):
@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信号,或者我应该使用其他方法来发送和接收这些消息
谢谢等等什么?这些信号只在django项目中起作用,一个信号可以到达的最外部点是在方法中运行命令save()并检查数据库是否保存了它 您可以做的是在终端、API、套接字或任何通信中运行一些python代码,这些都是您想要谈论后端的通信 因此,给一个镜头,你可以使一个API到你的管道上游(我不知道它是什么)能够接收一些POST或GET方法,并设置你的后端发送一个请求到你的应用程序(在其他容器中)接收数据,你想要的。。。您可以使用
请求
或curl
我认为您在不同的容器中使用2台服务器Django不会向其他正在运行的进程(实例)发送信号,它只是为当前正在运行的实例触发它们,它甚至不知道其他容器的存在。您应该实现某种消息队列来通知其他容器。据我所知,您已经在使用芹菜了,所以您可以在“index\u post\u save”方法下使用芹菜将消息传递到另一个容器。是的,正如我在回答中所说,您可以使用某种通信方式,如API、套接字。。。每个服务器都在不同的端口上运行,如果在同一个服务器上,您可能会记住为这些答案设置CORSOk thansk。由于容器使用相同的数据库,我认为有一种方法可以使信号在两者之间工作。我想我要芹菜汁