我已经用Django通道创建了一个web应用程序,我在尝试使用Supervisor系统时遇到了问题。
首先,应用程序在本地运行良好。
远程(我使用带有UbuntuServer18.04LTS的AWS EC2实例),当使用命令daphne -b 0.0.0.0 -p 8000 mysite.asgi:application运行时,它也工作得很好。
但是,我不能让它与主管一起工作。我遵循正式的Django通道文档(https://channels.readthedocs.io/en/latest/deploying.html)的指示,因此我有:
当设置这种方式时,网页不工作(504网关超时)。在主管日志文件中,我看到:
2018-11-14 14:48:21,511 INFO Starting server at fd:fileno=0, unix:/run/daphne/daphne0.sock
2018-11-14 14:48:21,516 INFO HTTP/2 support enabled
2018-11-14 14:48:21,517 INFO Configuring endpoint fd:fileno=0
2018-11-14 14:48:22,015 INFO Listening on TCP address 127.0.0.1:8000
2018-11-14 14:48:22,025 INFO Configuring endpoint unix:/run/daphne/daphne0.sock
2018-11-14 14:48:22,026 CRITICAL Listen failure: [Errno 2] No such file or directory: '1416' -> b'/run/daphne/daphne0.sock.lock'
2018-11-14 14:48:22,091 INFO Starting server at fd:fileno=0, unix:/run/daphne/daphne2.sock
2018-11-14 14:48:22,096 INFO HTTP/2 support enabled
2018-11-14 14:48:22,097 INFO Configuring endpoint fd:fileno=0
2018-11-14 14:48:22,135 INFO Starting server at fd:fileno=0, unix:/run/daphne/daphne3.sock
2018-11-14 14:48:22,152 INFO HTTP/2 support enabled
2018-11-14 14:48:22,153 INFO Configuring endpoint fd:fileno=0
2018-11-14 14:48:22,237 INFO Listening on TCP address 127.0.0.1:8000
2018-11-14 14:48:22,241 INFO Listening on TCP address 127.0.0.1:8000
2018-11-14 14:48:22,242 INFO Configuring endpoint unix:/run/daphne/daphne3.sock
2018-11-14 14:48:22,242 CRITICAL Listen failure: [Errno 2] No such file or directory: '1419' -> b'/run/daphne/daphne3.sock.lock'
2018-11-14 14:48:22,252 INFO Configuring endpoint unix:/run/daphne/daphne2.sock
2018-11-14 14:48:22,252 CRITICAL Listen failure: [Errno 2] No such file or directory: '1420' -> b'/run/daphne/daphne2.sock.lock'等。
请注意,在Supervisor命令中,Daphne进程是以另一种方式调用的(使用其他参数集),而不是前面运行的地址和端口参数,而是套接字和文件描述符的参数(关于这些参数,我完全不知道)。我怀疑这是遇到错误的原因。
如有任何帮助或建议,将不胜感激。
相关的软件包版本:
channels==2.1.2
channels-redis==2.2.1
daphne==2.2.1
Django==2.1.2编辑:
当我为套接字文件(在Supervisor配置文件中的Daphne命令中)创建空文件时,即。/run/daphne/daphne0.sock、/run/daphne/daphne1.sock等,然后日志文件声明如下:
2018-11-15 10:24:38,289 INFO Starting server at fd:fileno=0, unix:/run/daphne/daphne0.sock
2018-11-15 10:24:38,290 INFO HTTP/2 support enabled
2018-11-15 10:24:38,280 INFO Configuring endpoint fd:fileno=0
2018-11-15 10:24:38,458 INFO Listening on TCP address 127.0.0.1:8000
2018-11-15 10:24:38,475 INFO Configuring endpoint unix:/run/daphne/daphne0.sock
2018-11-15 10:24:38,476 CRITICAL Listen failure: Couldn't listen on any:b'/run/daphne/daphne0.sock': [Errno 98] Address already in use.问:这些文件不应该是空的吗?它们应该包括哪些内容?
发布于 2018-11-28 16:58:59
Fabio的答案,将文件描述符参数替换为端点参数,为这个问题提供了一个快速解决方法(这似乎是Daphne代码中的一个bug )。
但是,Daphne存储库中的修复程序很快就提交了,这样原始指令就可以正常工作了。
顺便提一句(对于那些我在最初的问题中写过的听录音失败的人来说),请确保套接字文件的物理位置(在我的例子中是/run/daphne/)是可访问的--我花了太多的时间才发现仅仅创建/run目录中的daphne文件夹就可以完成任务(即使我用sudo运行所有的东西).为了预防措施,可以考虑将套接字文件重定向到另一个文件夹,例如/tmp,它允许在没有sudo权限的情况下创建目录。
发布于 2018-11-22 22:19:28
在主管ASGI配置文件中,在以下行中
command=/home/ubuntu/django_app/venv/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers mysite.asgi:application
将--fd 0替换为--endpoint fd:fileno=0。
https://stackoverflow.com/questions/53304883
复制相似问题