Получение Django в VirtualEnv для запуска через Upstart - PullRequest
2 голосов
/ 12 марта 2012

Я пытался перебрать документы и примеры, чтобы мой Django работал через upstart, чтобы он мог работать постоянно, но я не могу.

Вот мой файл конфигурации upstart, расположенный по адресу/etc/init/myapp.conf:

start on startup
#expect daemon
#respawn
console output

script
  chdir /app/env/bin
  exec source activate
  exec /app/env/bin/python /app/src/manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &
end script

Когда я набираю sudo service myapp start, консоль говорит, что она запустилась, но, похоже, не работает.

Можно ли увидеть некоторую отладкувывод, чтобы увидеть, что идет не так?Мне нужно запустить мое приложение Django от имени другого пользователя - т.е. djangouser.Как я могу это сделать?

(я комментировал некоторые строки, чтобы проверить, где работает служба).Это не для производственного использования, а только для внутреннего использования.

Спасибо.


Правка №1:

Я обернул обе свои команды в простой скриптна /app/run.sh

#!/bin/bash

cd /app/env/bin
source activate
cd /app/src
python manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &

.. и я изменил свой /etc/init/myapp.conf на

start on startup
expect daemon

exec su - djangouser -c "bash /app/run.sh"

При выполнении sudo service myapp start - приложение запускается, но PID неверен, и яне могу убить его с помощью sudo service myapp stop

Есть идеи?

Ответы [ 4 ]

1 голос
/ 09 февраля 2013

Как насчет использования nginx и uwsgi с вашим virtualenv.это даст вам среду, подобную производственной, но также запустит ваше приложение django при запуске.если вы используете ubuntu 10, вам следует взглянуть на uwsgi-python, в противном случае просто установите последнюю версию uwsgi.я обычно начинаю свой virtualenv в uwsgi примерно так:

sudo nano /etc/uwsgi-python/apps-available/app.xml
<uwsgi>
   <socket>127.0.0.1:8889</socket>
  <pythonpath>/home/user/code/</pythonpath>
  <virtualenv>/home/user/code</virtualenv>
  <pythonpath>/home/user/code/app</pythonpath>
   <app mountpoint="/">
    <script>uwsgiApp</script>
  </app>
</uwsgi>

также настраиваю ваши nginx файлы в / etc / nginx / apps-available / default (файл немногопрямо вперед).это поможет вам всегда иметь приложение django,

1 голос
/ 12 марта 2012

Изменение:

exec source activate

Всего:

source activate

Это загрузит виртуальную среду.Вы, вероятно, должны отказаться от другого "exec".Если это не сработает, пожалуйста, опубликуйте свои журналы выскочки.

Несколько замечаний:

  • регистрация вывода в другом месте, отличном от / dev / null, может быть полезной:)
  • runserver не является стабильным, иногда я вижу его сбой, и в этом случае, я думаю, вам придется принудительно перезапустить upstart или поместить вызов runserver в цикл while
  • you не сможет использовать интерактивный отладчик как ipdb с этой настройкой
0 голосов
/ 30 июня 2015

Это должно работать на Ubuntu 14.04 и, возможно, на других версиях:

root@vagrant-ubuntu-trusty-64:/etc/init# service my_app start 
my_app start/running, process 7799

root@vagrant-ubuntu-trusty-64:/etc/init# cat /var/log/upstart/my_app.log 

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

June 30, 2015 - 06:54:18
Django version 1.8.2, using settings 'my_test.settings'
Starting development server at http://0.0.0.0:8080/
Quit the server with CONTROL-C.

root@vagrant-ubuntu-trusty-64:/etc/init# service my_app status
my_app start/running, process 7799
root@vagrant-ubuntu-trusty-64:/etc/init# service my_app stop
my_app stop/waiting
root@vagrant-ubuntu-trusty-64:/etc/init# service my_app status
my_app stop/waiting

Вот конфиг, чтобы он работал:

root@vagrant-ubuntu-trusty-64:/etc/init# cat my_app.conf 

description "my_app upstart script"

start on runlevel [23]

respawn

script
    su vagrant -c "source /home/vagrant/dj_app/bin/activate; /home/vagrant/dj_app/bin/python /home/vagrant/my_test/manage.py runserver 0.0.0.0:8080"
end script
0 голосов
/ 07 ноября 2013

su проблематично, потому что это разветвляет процесс.Вы можете использовать sudo -u djangouser вместо этого или просто добавить

setuid djangouser

в файл настроек.

...