首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Daphne (Django通道)配置监控器

为Daphne (Django通道)配置监控器
EN

Stack Overflow用户
提问于 2018-11-14 16:36:18
回答 2查看 6.9K关注 0票数 11

我已经用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)的指示,因此我有:

  • nginx配置文件: 上行信道-后端{服务器本地主机:8000;}服务器{ server_name www.example.com;keepalive_timeout 5;client_max_body_size 1m;access_log error_log /home/ubuntu/django_app/log/nginx-error.log;位置/静态/{别名/home/ubuntu/django_app/mysite/staticfile/;}位置/{ try_files $uri @proxy_to_app;}位置@proxy_to_app { proxy_pass http://channels-backend;proxy_http_version 1.1;proxy_set_header升级$http_upgrade;proxy_set_header连接“升级”;proxy_redirect off;proxy_set_header主机$host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X转发-For $proxy_add_x_forwarded_for;proxy_set_header X转发-主机$server_name;}侦听443 ssl;#由Certbot ssl_certificate ssl_certificate_key #管理由Certbot管理的#包括/etc/letsencrypt/options-ssl-nginx.conf;由Certbot ssl_dhparam /etc/letsencrypt/ssl-dhpars.pem管理的#;由Certbot }服务器管理的#{聆听80;server_name www.example.com;if ($host = www.example.com) {返回301 uri;}#由Certbot返回404;#管理由Certbot }
  • 主管配置文件: 程序:asgi套接字=tcp://localhost:8000目录=/home/ubuntu/django_app/mysite command=/home/ubuntu/django_app/venv/bin/daphne -u /run/daphne%(Process_num)d.sock-fd 0-access-log--代理标题mysite.asgi:application numprocs=4 process_name=asgi%(process_num)d autostart=true autorestart=true redirect_stderr=true

当设置这种方式时,网页不工作(504网关超时)。在主管日志文件中,我看到:

代码语言:javascript
复制
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进程是以另一种方式调用的(使用其他参数集),而不是前面运行的地址和端口参数,而是套接字和文件描述符的参数(关于这些参数,我完全不知道)。我怀疑这是遇到错误的原因。

如有任何帮助或建议,将不胜感激。

相关的软件包版本:

代码语言:javascript
复制
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等,然后日志文件声明如下:

代码语言:javascript
复制
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.

问:这些文件不应该是空的吗?它们应该包括哪些内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-28 16:58:59

Fabio的答案,将文件描述符参数替换为端点参数,为这个问题提供了一个快速解决方法(这似乎是Daphne代码中的一个bug )。

但是,Daphne存储库中的修复程序很快就提交了,这样原始指令就可以正常工作了。

顺便提一句(对于那些我在最初的问题中写过的听录音失败的人来说),请确保套接字文件的物理位置(在我的例子中是/run/daphne/)是可访问的--我花了太多的时间才发现仅仅创建/run目录中的daphne文件夹就可以完成任务(即使我用sudo运行所有的东西).为了预防措施,可以考虑将套接字文件重定向到另一个文件夹,例如/tmp,它允许在没有sudo权限的情况下创建目录。

票数 2
EN

Stack Overflow用户

发布于 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://github.com/django/daphne/issues/234

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53304883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档