2

我一直在努力通过文档和示例来让我的 Django 在新贵中运行,这样我就可以让它一直运行,但我做不到。

这是我的新贵配置文件,位于/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

4 回答 4

1

如何使用nginxuwsgi与您的virtualenv. 这将为您提供类似生产的环境,但也会django在启动时启动您的应用程序。如果你正在使用ubuntu 10你应该看看uwsgi-python,否则只需安装最新的uwsgi。我通常是这样开始virtualenvuwsgi

须藤纳米/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始终拥有您的应用程序,

于 2013-02-09T13:38:02.907 回答
1

改变:

exec source activate

只需:

source activate

这将加载虚拟环境。您可能应该放弃另一个“执行者”。如果这不起作用,请发布您的新贵日志。

几点说明:

  • 将输出记录到 /dev/null 以外的其他地方可能很有用:)
  • runserver 不稳定,我看到它有时会崩溃,在这种情况下,我想你需要强制 upstart 重新加载,或者将 runserver 调用放在 while 循环中
  • 您将无法在此设置中使用像 ipdb 这样的交互式调试器
于 2012-03-12T10:32:06.797 回答
0

su是有问题的,因为它分叉了这个过程。您可以sudo -u djangouser改用或简单地添加

setuid djangouser

在你的 conf 文件中。

于 2013-11-07T11:36:22.310 回答
0

这应该适用于 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
于 2015-06-30T06:58:56.207 回答