【问题标题】:Getting Django in a VirtualEnv to run through Upstart让 Django 在 VirtualEnv 中通过 Upstart 运行
【发布时间】:2012-03-12 09:47:14
【问题描述】:

我一直在努力阅读文档和示例,让我的 Django 在 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 杀死它

有什么想法吗?

【问题讨论】:

  • exec 参数可能应该是 /app/env/bin/python manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &
  • 您好 Jkbr,我已经使用了您的解决方案并添加了 python 二进制文件的完整路径。我重新启动了我的系统,它不再等待CRTL ^ C。现在它只是说任务已启动,但我似乎找不到它正在运行。我可以以某种方式查看控制台输出吗?谢谢
  • 我尝试了source activatebash script 两种方式,仍然可以启动或停止。我正在尝试cherrypy而不是django,但应该是一样的。 Virtualenv、sudo/su - 任何帮助都会很棒
  • 源在 /bin/sh 环境中不存在,使用 "."反而。检查 /var/log/upstart/myapp.log,您应该会看到“/bin/sh: 1: source: not found”。
  • @MridangAgarwalla 您是否设法找出如何使用 myapp stop 杀死它?我遇到了同样的问题,停止挂起。

标签: django linux ubuntu virtualenv upstart


【解决方案1】:

变化:

exec source activate

只是:

source activate

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

几点说明:

  • 将输出记录到 /dev/null 以外的其他位置可能很有用 :)
  • runserver 不稳定,我看到它有时会崩溃,在这种情况下,我想你需要强制 upstart 重新加载,或者将 runserver 调用置于 while 循环中
  • 您将无法使用此设置use an interactive debugger 喜欢 ipdb

【讨论】:

  • 嗨,Jpic,请看看我的编辑。我已经启动了我的应用程序,但我无法终止它。
  • 主题是“让 Django 在 VirtualEnv 中运行通过新贵”。另一个问题 -> 另一个话题。
【解决方案2】:

如何将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 应用程序,

【讨论】:

    【解决方案3】:

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

    setuid djangouser
    

    在你的 conf 文件中。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 2011-11-13
        相关资源
        最近更新 更多