在虚拟环境中获取Django以通过Upstart运行

我一直试图通过文档和例子跋涉让我的Django运行在暴发户,所以我可以让它一直运行,但无法如此。

这是我的新贵的configuration文件位于/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 ,控制台说它已经启动,但似乎没有运行。

是否有可能看到一些debugging输出,看看有什么问题? 我需要运行我的Django应用程序作为另一个用户 – 即djangouser 。 我怎么能这样做?

(我一直在评论一些线路来testing服务出错的地方)。 这不是生产用途,而是我的内部开发使用。

谢谢。


编辑#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

有任何想法吗?

Solutions Collecting From Web of "在虚拟环境中获取Django以通过Upstart运行"

更改:

 exec source activate 

只是:

 source activate 

这将加载虚拟环境。 你应该放弃另一个“执行”。 如果这不起作用,请张贴您的暴发户日志。

几句话:

  • 将输出记录到/ dev / null以外的地方可能是有用的:)
  • runserver是不稳定的,我看到它有时崩溃,在这种情况下,我想你将需要强制upstart重新加载,或把runserver调用在一个while循环
  • 在这个设置下你将不能使用像ipdb这样的交互式调试器

如何使用nginxuwsgi与你的virtualenv 。 这会给你一个像环境一样的生产,但也会启动你的django应用程序。 如果您使用的是ubuntu 10 ,则应该查看uwsgi-python ,否则只需安装最新的uwsgi 。 我通常在uwsgi开始我的virtualenv ,就像这样:

  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> 

还要在/ etc / nginx / apps-available / default中设置你的nginx文件(该文件有点简单)。 这将帮助你有你的django应用程序在任何时候,

su是有问题的,因为它推动了这个过程。 您可以使用sudo -u djangouser或者直接添加

 setuid djangouser 

在你的conf文件中。

这应该适用于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