Как развернуть каналы Django 2.x на AWS Elastic Beanstalk? - PullRequest
0 голосов
/ 25 февраля 2019

В этом руководстве рассматривается развертывание каналов 1.x.Однако это не работает с каналами 2.x.Неисправной частью является сценарий демона, который выглядит следующим образом:

files:"/opt/elasticbeanstalk/hooks/appdeploy/post/run_supervised_daemon.sh":
mode: "000755"
owner: root
group: root
content: |
  #!/usr/bin/env bash

  # Get django environment variables
  djangoenv=`cat /opt/python/current/env 
  | tr '\n' ',' | sed 's/%/%%/g' | sed 's/export //g' | sed 's/$PATH/%(ENV_PATH)s/g' 
  | sed 's/$PYTHONPATH//g' | sed 's/$LD_LIBRARY_PATH//g'`
  djangoenv=${djangoenv%?}

  # Create daemon configuraiton script
  daemonconf="[program:daphne]
  ; Set full path to channels program if using virtualenv
  command=/opt/python/run/venv/bin/daphne -b 0.0.0.0 -p 5000 <your_project>.asgi:channel_layer
  directory=/opt/python/current/app
  user=ec2-user
  numprocs=1
  stdout_logfile=/var/log/stdout_daphne.log
  stderr_logfile=/var/log/stderr_daphne.log
  autostart=true
  autorestart=true
  startsecs=10

  ; Need to wait for currently executing tasks to finish at shutdown.
  ; Increase this if you have very long running tasks.
  stopwaitsecs = 600

  ; When resorting to send SIGKILL to the program to terminate it
  ; send SIGKILL to its whole process group instead,
  ; taking care of its children as well.
  killasgroup=true

  ; if rabbitmq is supervised, set its priority higher
  ; so it starts first
  priority=998

  environment=$djangoenv

  [program:worker]
  ; Set full path to program if using virtualenv
  command=/opt/python/run/venv/bin/python manage.py runworker
  directory=/opt/python/current/app
  user=ec2-user
  numprocs=1
  stdout_logfile=/var/log/stdout_worker.log
  stderr_logfile=/var/log/stderr_worker.log
  autostart=true
  autorestart=true
  startsecs=10

  ; Need to wait for currently executing tasks to finish at shutdown.
  ; Increase this if you have very long running tasks.
  stopwaitsecs = 600

  ; When resorting to send SIGKILL to the program to terminate it
  ; send SIGKILL to its whole process group instead,
  ; taking care of its children as well.
  killasgroup=true

  ; if rabbitmq is supervised, set its priority higher
  ; so it starts first
  priority=998

  environment=$djangoenv"

  # Create the supervisord conf script
  echo "$daemonconf" | sudo tee /opt/python/etc/daemon.conf

  # Add configuration script to supervisord conf (if not there already)
  if ! grep -Fxq "[include]" /opt/python/etc/supervisord.conf
      then
      echo "[include]" | sudo tee -a /opt/python/etc/supervisord.conf
      echo "files: daemon.conf" | sudo tee -a /opt/python/etc/supervisord.conf
  fi

  # Reread the supervisord config
  sudo /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf reread

  # Update supervisord in cache without restarting all services
  sudo /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf update 

  # Start/Restart processes through supervisord
  sudo /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf restart daphne
  sudo /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf restart worker

После развертывания в журналах AWS есть 2 ошибки: daphne: Нет такого процесса и работника: Нет такого процесса.

Как изменить этот скрипт, чтобы он также работал на каналах 2.x?

Спасибо

1 Ответ

0 голосов
/ 18 мая 2019

У меня была та же ошибка, и моя причина была в том, что процесс супервизора, который запускает эти дополнительные сценарии, не запускал процесс Дафни из-за этой строки кода:

if ! grep -Fxq "[include]" /opt/python/etc/supervisord.conf

Это проверяет, присутствует ли в файле supervisord.conf [include], и добавляет процесс ТОЛЬКО в случае отсутствия [include].

В моем случае в моем файле supervisord был

[include]
celery.conf 

, который не позволил сценарию Дафни добавить daemon.conf.

Есть несколько вещей, которые вы можете сделать:

  1. Если у вас есть другой скрипт, создающий файл .conf, объедините их в один, используя ту же логику включения

  2. Переписать логику включения, чтобы специально проверить daemon.conf

  3. Вручную добавить daemon.conf в supervisord.conf по SSH в ваш экземпляр EC2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...