我最近开始使用 django。我开始做一个小项目。我一直在使用 celery 和 redis worker。每次使用 celery 和 redis 我必须运行 celery 和 redis 服务器,然后运行 django 服务器。这是一个有点漫长的过程。我有两个问题。1. 我是否通过每次运行服务器来做正确的事情,还是有任何其他正确的方法来处理这个过程?2.如果我的方向正确,有什么方法可以做到这一点吗?
我试过 circus.ini ,但没有用。
我最近开始使用 django。我开始做一个小项目。我一直在使用 celery 和 redis worker。每次使用 celery 和 redis 我必须运行 celery 和 redis 服务器,然后运行 django 服务器。这是一个有点漫长的过程。我有两个问题。1. 我是否通过每次运行服务器来做正确的事情,还是有任何其他正确的方法来处理这个过程?2.如果我的方向正确,有什么方法可以做到这一点吗?
我试过 circus.ini ,但没有用。
如果您使用 UNIX 系统:
&
- 使用命令。redis-server & celery -A app_name worker -l info & python manage.py runserver
这种方法的缺点——redis和celery将在后台运行,即使在django 开发服务器关闭后也是如此。所以你需要终止这些进程。有关如何执行此操作的示例,请参阅此 unix se 答案。
因此,您可以创建 2 个 bash 脚本start.sh
(包含带有 的命令&
)和cleanup.sh
(终止进程)并分别运行它们。
生产见目的#2
基于Yevhenii M.的回答,您可以使用 a 启动子shell 命令,以在您点击+时终止该子shell 中的trap
所有正在运行的进程:CtrlC
(trap "kill 0" SIGINT; redis-server & celery -A app_name worker -l info & python manage.py runserver)
或作为更易读的多行命令:
(
trap "kill 0" SIGINT
redis-server &
celery -A app_name worker -l info &
python manage.py runserver
)
另一种选择是使用 Procfile 管理器,但这需要安装额外的依赖项/程序。像工头或其他语言的其中一个端口之类的东西:
(来源:工头的自述文件)
为此,您创建一个Procfile
(项目根目录中的文件),在其中指定要运行的命令:
redis: redis-server
worker: celery -A app_name worker
web: python manage.py runserver
然后运行foreman start