Gunicorn internal server error

Hello, guys. Don't know what's wrong. I am using default digital ocean setup. I've used it a lot of times by now. But this time I needed to implement post request from my client mobile ...

Hello, guys. Don’t know what’s wrong.
I am using default digital ocean setup. I’ve used it a lot of times by now. But this time I needed to implement post request from my client mobile app. I’ve installed cors-headers app for django and tested my app locally for a long time, everything was great (btw my mobile app is written on ionic framework and uses angularjs to post). On server everything was also ok with following commands:
python manage.py runserver 9000
and (!!!)
gunicorn config.wsgi —bind 127.0.0.1:9000
By ok I mean post requests were handled as they should be.
But when I run gunicorn as a service (sudo service gunicorn restart) on every post request from my mobile app I get 500 internal server error. And this is just after everything was ok not in service mode. What’s so different in service mode so it doesn’t allow my post requests to reach server?
Again: the difference is only service / not service mode of gunicorn. (but of cource service mode has it’s config while «working» gunicorn is just «gunicorn config.wsgi —bind 127.0.0.1:9000»)

Also I need to say that the website is running fine even in service mode. So the problem is only with this cross-domain post requests.

Errors examples (gunicorn as a service):

178.140.183.40 - - [29/Jun/2015:22:07:10 -0400] "POST /create_o_action/ HTTP/1.1" 500 58581 "-" "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36"
178.140.183.40 - - [29/Jun/2015:22:07:10 -0400] "POST /create_o_action/ HTTP/1.1" 500 58595 "-" "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36"

Success examples (gunicorn config.wsgi —bind 127.0.0.1:9000 ):

178.140.183.40 - - [29/Jun/2015:22:25:58 -0400] "POST /create_o_action/ HTTP/1.1" 200 32 "-" "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36"
178.140.183.40 - - [29/Jun/2015:22:25:58 -0400] "POST /create_c_action/ HTTP/1.1" 200 34 "-" "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36"

My gunicorn settings (more or less default digital ocean):

/etc/init/gunicorn.conf

description "Gunicorn daemon for Django project"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django/counter_platform_django

exec gunicorn 
    --name=webapp 
    --pythonpath=webapp 
    --bind=127.0.0.1:9000 
    --config /etc/gunicorn.d/gunicorn.py 
    config.wsgi:application

/etc/gunicorn.d/gunicorn.py

"""gunicorn WSGI server configuration."""
from multiprocessing import cpu_count
from os import environ


def max_workers():
    return cpu_count() * 2 + 1

max_requests = 1000
worker_class = 'gevent'
workers = max_workers()

So what’s exactly different in two ways of running gunicorn? I’m really curious. Of course there is —daemon (which btw also works fine), but solution will be better.
Also I found a lot of questions on the internet (all without answers) about problems with post requests and gunicorn in service mode. If we will find solution — some of them also can be answered.

У меня есть приложение Django, работающее на сервере- пулемете, с фронтом nginx. Мне нужно диагностировать сбой производительности с результатом HTTP 500, но файлы журнала ошибок не содержат информации, которую я ожидал бы. Thusly:

  • у пушки есть установка errorlog = "/somepath/gunicorn-errors.log"
  • nginx имеет параметр error_log/somepath/nginx-errors.log;
  • Мое приложение имеет InternalErrorView dispatch которого делает безусловное raise Exception("Just for testing.") Это представление сопоставляется с URL /fail_now
  • Я не модифицировал handler500
  • Когда я запускаю свое приложение с DEBUG=True и имею свой запрос браузера /fail_now, я вижу обычный экран ошибок Django, в том числе "Just for testing." сообщение. Хорошо.
  • Когда я запускаю свое приложение с DEBUG=False, я получаю ответ, состоящий всего из <h1>Server Error (500)</h1>, как и ожидалось. Хорошо.
  • Однако, когда я смотрю в gunicorn-errors.log, запись для этого события HTTP 500 вообще отсутствует. Зачем? Как я могу его получить? Я хотел бы получить трассировку.
  • Аналогично, в nginx-errors.log: нет следа 500 или URL /fail_now. Зачем?

Бонусный вопрос: когда я сравниваю это с моей исходной проблемой производства, я получаю другой ответ: 9-строчный документ с <h1><p>Internal Server Error</p></h1> в качестве центрального сообщения. Зачем?

Бонусный вопрос 2: когда я копирую содержимое своей базы данных на мой промежуточный сервер (который идентичен по конфигурации на производственном сервере) и устанавливает DEBUG=True в Django, /fail_now работает так, как ожидалось, но моя исходная проблема все еще отображается как <h1><p>Internal Server Error</p></h1>. WTF?

24 авг. 2016, в 11:48

Поделиться

Источник

2 ответа

Хорошо, это заняло много времени, но я нашел все:

  • Ответ <h1>Server Error (500)</h1> поступает из django.views.defaults.server_error Django (если нет шаблона 500.html).
  • <h1><p>Internal Server Error</p></h1> из бонусного вопроса исходит от gunicorn gunicorn.workers.base.handle_error.
  • nginx регистрирует ошибку 500 в файле журнала доступа, а не файл журнала ошибок; по-видимому, потому, что это был не сам nginx, который потерпел неудачу.
  • Для /fail_now, gunicorn также зарегистрирует проблему в журнале доступа, а не в журнале ошибок; опять же предположительно потому, что увольнитель как таковой не провалился, только приложение имеет.
  • Моя первоначальная проблема действительно появилась в журнале ошибок стрельбы, но я никогда не искал ее там, потому что я впервые представил файл журнала (раньше я использовал вывод logs Docker, что довольно сложно), и предположил, что это будет лучше использовать очень явный InternalErrorView для начальной отладки. (Это была идея, которая была неправильной по-интересному).
  • Однако моя фактическая ошибка программирования включала отправку ответа с заголовком Content-Disposition (сгенерированным в коде Django) следующим образом: attachment; filename="dag-wönnegården.pdf" attachment; filename="dag-wönnegården.pdf". Особые персонажи, по-видимому, способны заставить споткнуться, когда он обрабатывает этот ответ.

Написание этого вопроса помогло мне значительно диагностировать эту ситуацию. Теперь, если этот ответ помогает кому-то другому, магия StackOverflow снова работает.

Lutz Prechelt
24 авг. 2016, в 15:58

Поделиться

может быть ответ сервера 500 зарегистрирован в access_log не в errorlog

в файле nginx по умолчанию

access_log  /var/log/nginx/example.log;

я думаю <h1><p>Internal Server Error</p></h1> генерируется nginx в процессе производства ‘

в debug = False

raise исключение рассматривается как ошибка или http500, поэтому, если вы не изменили представление для handler500, будет отображаться страница с ошибкой по умолчанию 500

Исключение debug = true raise отображается на странице debug djnago debug

masternone
24 авг. 2016, в 13:24

Поделиться

Ещё вопросы

  • 1Соответствие регулярного выражения Java для атрибута двойного класса CSS
  • 0AngularJs — кнопка закладки с угловым
  • 1Атрибут класса в файле ARFF
  • 0TypeError: e не определено, при добавлении динамического выпадающего списка в поле поиска jqgrid
  • 0обязательное поле для флажков
  • 1Получить вывод даты без «запятой», используя JavaScript
  • 1Прогнозирование POS-тега предстоящего слова
  • 1Как создать интерактивную кнопку с ShapeDrawable?
  • 0GROUP_CONCAT () для извлечения многомерного массива
  • 1Недопустимая инструкция: ошибка 4 при запуске любой программы Tensorflow
  • 0Как реализовать << и >> для указателей?
  • 1Очередь с использованием двойки STM
  • 1В pandas / numpy как создать сводную таблицу с количеством строковых элементов?
  • 0Как вызвать всплывающее окно в главной html-странице извне директивы angularjs?
  • 0разрешить изменение URI в коде воспламенителя
  • 1Можете ли вы обновить версию sqlite3 на вашем Android?
  • 0Скрыть div при нажатии на документ, но не при нажатии на конкретную ссылку
  • 1Вставить новые строки на основе даты в платформе Entity
  • 1Отображать сетку просмотра изображений по номеру
  • 0Используя область родительского div
  • 1Отображаемое имя asp.net не может отображаться
  • 0Текстура для повторения и зацикливание OpenGL
  • 1Android — как накачать сложный макет и добавить в другой макет?
  • 1Непонятная проблема с Python IDLE Shell
  • 1BS4: Как мне удалить ненужные HTML-теги и оставить только теги <p> и <ruby>?
  • 1Как сделать EditText, исходный текст которого можно только полностью изменить?
  • 1Самый эффективный способ сортировки по нескольким полям в Java
  • 1Текстура на сфере нечеткая после обновления версии
  • 0невозможно отобразить несколько изображений с несколькими переменными
  • 1Доступ к таблице в таблице Excel с использованием C #
  • 0Перекрытие тега списка
  • 0как сделать составной внешний ключ (не составной первичный ключ) как уникальный в MySQL
  • 0Использование | в PHP
  • 0Найти первый элемент с классом, использовать класс, чтобы добавить элемент заголовка
  • 0SQLSTATE [HY000]: общая ошибка после выполнения запроса
  • 0Среднее число нечетных клеток?
  • 0CORS XMLHttpRequest запрос источника и реферера
  • 1Разбор JSON с неопределенным значением
  • 0SoapUI — Сервис не возвращает операций
  • 0Вызов определенной функции из библиотеки Windows
  • 0Как объединить массив по значению запятой?
  • 0Как очистить URL после перенаправления входа в Facebook .. PHP
  • 1Запретить привязку функции более одного раза
  • 1CAML-запрос не работает, когда неделя разделена на месяц, т.е. 31-й и 4-й возвращают только 31
  • 0MoneyWorks: программно обновить запись
  • 1Вложение ViewModel и проверка, зависящая от бизнес-логики, с использованием IValidatableObject
  • 0Отладка динамического параллелизма CUDA не поддерживается в режиме вытеснения. Точки останова будут отключены
  • 0Проблемы с очисткой класса с помощью removeClass
  • 0JQuery добавить — для ввода, но только добавить дважды
  • 0Как я могу сделать jQuery .each fadeOut и fadeIn «слайдером»?

Сообщество Overcoder

Это мое первое развертывание в Django для производства.

Я проверил, может ли он обслуживать мое приложение Django, выполнив следующую команду, и нет никаких проблем, я могу добраться до моего сайта по ip-адресу моего сервера.

gunicorn hello.wsgi:application --bind 0.0.0.0:8000

application --bind 0.0.0.0:8000
[2022-05-01 11:00:46 +0000] [26484] [INFO] Starting gunicorn 20.1.0
[2022-05-01 11:00:46 +0000] [26484] [INFO] Listening at: http://0.0.0.0:8000 (26484)
[2022-05-01 11:00:46 +0000] [26484] [INFO] Using worker: sync
[2022-05-01 11:00:46 +0000] [26486] [INFO] Booting worker with pid: 26486
/home/scknylmz35/PersonelBlog/home/views.py:24: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'home.models.Blog'> QuerySet.

Затем я выполнил следующие команды:

sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=baris
Group=www-data
WorkingDirectory=/home/baris/eventhub
ExecStart=/home/baris/eventhub/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/baris/eventhub/eventhub.sock eventhub.wsgi:application

[Install]
WantedBy=multi-user.target
sudo systemctl start gunicorn
sudo systemctl enable gunicorn

И я протестировал gunicorn

>> sudo systemctl status gunicorn

 Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor pres>
     Active: active (running) since Sun 2022-05-01 08:01:47 UTC; 2h 19min ago
   Main PID: 23885 (gunicorn)
      Tasks: 4 (limit: 1132)
     Memory: 136.3M
     CGroup: /system.slice/gunicorn.service
             ├─23885 /home/scknylmz35/PersonelBlog/venv/bin/python /home/scknyl>
             ├─23897 /home/scknylmz35/PersonelBlog/venv/bin/python /home/scknyl>
             ├─23898 /home/scknylmz35/PersonelBlog/venv/bin/python /home/scknyl>
             └─23899 /home/scknylmz35/PersonelBlog/venv/bin/python /home/scknyl>

Кажется, что все работает хорошо. Но когда я пытаюсь зайти на свой сайт как mysite.me, я сталкиваюсь с «Internal Server Error»

Также, когда я проверяю журнал ошибок nginx, ошибки нет.

Как я могу найти, в чем проблема? Не могли бы вы направить меня?

Вернуться на верх

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Gum general ошибка
  • Gulp error cannot get
  • Gulp error cannot find module sass require stack
  • Guitar rig 5 ошибка при установке no previous installation found
  • Guitar pro 7 ошибка при запуске 0xc000007b

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии