我目前正在处理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信号,还是应该使用其他方法发送和接收这些消息?
谢谢
答案 0 :(得分:0)
等等什么?信号仅在django项目中有效,一个信号可以到达的最外部点是当它们在方法内部运行命令save()并检查数据库是否保存了该信号时。
您可以做的是在终端,API,套接字或要与后端通信的任何通讯中运行一些python代码。
这样一来,您可以向上游的管道制作一个API(我不太了解它是什么),以便能够接收一些POST或GET方法,并设置后端将一个请求发送到您的应用程序(其他方法)容器)以接收所需的数据...您可以使用requests
或curl
我认为您正在不同容器中使用2台服务器