我最近开始使用django。我开始做一个小项目。我一直在用芹菜和Redis工人。每次使用celery和redis我都必须先运行celery和redis服务器,然后再运行django服务器。这是一个漫长的过程。 我有两个问题。 1.我是否通过每次运行服务器来做正确的事情,或者此过程还有其他正确的方法吗? 2.如果我的方向正确,是否有任何方法可以做到这一点?
我尝试了circus.ini,但没有用。
答案 0 :(得分:1)
如果使用UNIX系统:
&
命令即可。redis-server & celery -A app_name worker -l info & python manage.py runserver
这种方法的缺点-即使关闭 django开发服务器, redis 和 celery 也将在后台运行。因此,您需要终止此过程。有关如何操作的示例,请参见this unix se answer。
因此,您可以创建2个bash脚本start.sh
(包含带有&
的命令)和cleanup.sh
(终止进程)并分别运行它们。
关于生产,请参见目的2
答案 1 :(得分:0)
基于 Yevhenii M. 的 answer,您可以启动带有 trap
的子 shell 命令,当您按下 Ctrl 时,可以终止该子 shell 中的所有正在运行的进程+C:
(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 管理器,但这需要安装额外的依赖项/程序。类似 foreman 或其他语言的端口之一:
(来源:foreman 的 README)
为此,您创建一个 Procfile
(项目根目录中的文件),您可以在其中指定要运行的命令:
redis: redis-server
worker: celery -A app_name worker
web: python manage.py runserver
然后运行foreman start