Подтвердить что ты не робот

UWSGI не перезагружает, не перезагружает или не запускает сервис

У меня довольно большая проблема.

Я очень новичок в uwsgi и не уверен на 100%, как отлаживать эту проблему, но я дам вам информацию о том, где я нахожусь.

  • Раньше у меня были сайты, работающие над этой конфигурацией, и внезапно они не работают.
  • Я запускаю режим Императора.
  • Мои ini файлы в порядке, когда я использую командную строку для их запуска, но кажется, что они автоматически не запускаются

Когда я запустил uwsgi reload

sudo service uwsgi reload

Я получаю эту ошибку

* Reloading app server(s) uwsgi
...fail!

Вот оно. Я ничего не получаю.

Я искал часы при переполнении стека и не нашел ничего, что точно описывает эту проблему, я нашел много общего с файлами .ini, но я знаю, что это НЕ моя проблема, потому что при запуске моего сайта вручную через uwsgi --ini MYINI.ini, тогда доступ к нему выполняется отлично, проблема в uWSGI, и я не знаю, как найти решение для этого. Я просмотрел документы и ничего не могу найти по этой конкретной ошибке.

Если это кому-то интересно, это мой файл uwsgi-server.conf

description     "uWSGI Emperor"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

env LOGTO=/var/log/uwsgi.log
env BINPATH=/usr/local/bin/uwsgi

exec $BINPATH --emperor /etc/uwsgi/vassals --logto $LOGTO

Любое понимание будет оценено по достоинству. Я чувствую, что у меня что-то не хватает, но я так новичок в uWSGI. Я даже не могу догадаться, что это может быть. Для меня все выглядит нормально в соответствии с документацией.

Если вам нужна дополнительная информация о моей настройке, просто спросите.

4b9b3361

Ответ 1

Сегодня я написал блог о uwsgi, вы можете прочитать его сначала: http://guoqiao.farbox.com/post/2014/0416-use-uwsgi-the-right-way

Использовать uwsgi правильным способом

Использование uwsgi для вывода сайта django на сервер ubuntu довольно просто, но перед тем, как совершать ошибки, вам все же нужно знать.

установить

У вас есть два способа установить uwsgi на ubuntu: apt-get или pip

APT-получить

если вы используете apt-get, вам нужно установить плагин python:

sudo apt-get install uwsgi-plugin-python
sudo apt-get install uwsgi

И в вашем файле uwsgi ini для вашего сайта вам нужно добавить следующее:

plugins=python

пип

если вы используете pip, вам нужно сначала установить python-dev:

sudo apt-get install python-dev
sudo pip install uwsgi

И вам больше не понадобится plugins=python в ini файле.

См. sudo перед pip? Да, uwsgi должен быть установлен в глобальной системе. Если вы пропустите здесь sudo, вы можете установить его в своем виртуальном пространстве. Это бессмысленно, и у вас могут возникнуть проблемы с его запуском.

daemonize uwsgi

Daemonize означает, что uwsgi запускается при загрузке системы и в фоновом режиме. Согласно тому, как вы устанавливаете uwsgi, у вас есть два пути.

APT-получить

Когда вы apt-get install uwsgi на ubuntu, он автоматически устанавливается как служба. Магия находится в этом файле:

/etc/init.d/uwsgi

Файлы в /etc/init.d будут загружены sysvinit. Затем вы можете управлять своим сервисом uwsgi следующим образом:

sudo /etc/init.d/uwsgi start|stop|restart|reload

или

sudo service uwsgi start|stop|restart|reload

команда сервиса может найти службу, управляемую sysvinit

пип

Если вы установили uwsgi в pip, у вас есть только исполняемый файл в /usr/local/bin/uwsgi, вам необходимо его самостоятельно выполнить.

Когда вы открываете некоторые файлы в /etc/init.d/, вам может быть грустно: Я просто хочу зарегистрировать uwsgi как услугу, почему мне нужно написать такой длинный script, который похож на другие? Это не имеет смысла.

Хорошей новостью является то, что с помощью Upstart это довольно просто, что является альтернативой sysvinit. Он использует /etc/init/ вместо /etc/init.d/.

Просто создайте файл /etc/init/uwsgi.conf со следующим содержимым:

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log

а затем вы можете управлять своим процессом uwsgi следующим образом:

sudo initctl start|stop|restart|reload| uwsgi

или, все еще это:

sudo service uwsgi start|stop|restart|reload

Да, как видите, служебная команда умна, она может управлять сервисом как из sysvinit, так и с Upstart с той же командой.

И если у вас есть как /etc/init.d/uwsgi, так и /etc/init/uwsgi.conf, когда вы говорите:

sudo service uwsgi restart

Он перезапустит файл Upstart /etc/init/uwsgi.conf. Sysvinit будет проигнорирован или что-то подобное.

Конфигурация uwsgi для вашего сайта

Я рекомендую всем использовать метод pip и Upstart, это намного лучше, чем способ apt-get.

Если это так, вы используете режим императора uwsgi, который очень удобен и эффективен.

Теперь вы можете создать ini файл в /etc/uwsgi/vassals/ следующим образом:

[uwsgi]
virtualenv=/path/to/venv/
chdir=/path/to/proj/root
module=wsgi:application
env=DJANGO_SETTINGS_MODULE=settings
master=True
vacuum=True
socket=/tmp/%n.sock
pidfile=/tmp/%n.pid
daemonize=/var/log/uwsgi/%n.log

Значение% n означает ваше имя файла. Например, мое имя проекта "readfree", я создаю для него файл readfree.ini. Тогда% n означает "readfree". Вам не нужно заменять его настоящим именем. uwsgi сделает это за вас.

И затем перезагрузите или перезагрузите uwsgi:

sudo service uwsgi restart

Проверьте файл сокета:

ll /tmp/*.sock

Если он там, вы успешно с uwsgi сейчас:)

Конфигурация nginx для вашего сайта

Возьмите domain readfree.me, например:

server {
    listen          80;
    server_name     www.readfree.me;
    return          301 $scheme://readfree.me$request_uri;
}

server {
    listen 80;
    charset utf-8;
    server_name readfree.me;

    location  /static/ {
        alias  /path/to/static/;
    }

    location  /media/ {
        alias /path/to/media/;
    }

    location / {
        try_files $uri @django;
    }

    location @django {
       uwsgi_pass unix:///tmp/readfree.sock;
       include uwsgi_params;
    }
}

перезапустите nginx, вы увидите свой сайт!

ответьте на вопрос

Ваш конфигурационный файл для uwsgi -/etc/init/uwsgi-server.conf Итак, имя, которое вы должны использовать, это uwsgi-server, а не uwsgi

вам нужно перезапустить экземпляр императора uwsgi следующим образом:

sudo initctl restart uwsgi-server

или

sudo service uwsi-server restart

Что все!