为vagrant中的多个Django应用程序设置开发环境,允许即时更新

时间:2015-09-04 05:03:48

标签: python django vagrant

我已经使用vagrant和virtualbox设置了一个虚拟环境。

虚拟环境使用ubuntu 14.04生产操作系统。

我希望使用相同的虚拟机设置来安装多个django应用程序。

我的期望

每当我使用我最喜欢的编辑器(例如Vim或Sublime)编辑我的macbook上的任何python文件或html时,只要我在浏览器上刷新(也在我的macbook OS中),就会立即进行更改

通过http://djangoapp1等网址访问django应用。其他应用可能是http://djangoapp2

所有这些网址实际上都指向同一个流浪汉机器。

当我想编辑数据库(postgres)时,我只需要在我的macbook中运行valentina工作室,它将连接到在虚拟机内运行的postgres数据库。

实际发生的事情

我花了很多时间使用nginx和uwsgi在同一台机器上运行多个django应用程序。

然后我意识到每当我做出改变时,改变都不会立即反映出来。我需要在uwsgi进程中添加一个--touch-reload,现在使用upstart启动了。

即使我添加了--touch-reload,每当我想反映我的代码更改时,我仍然不得不故意去“触摸”一个文件。

即使完成后,由于某种原因,更改并不总是显示出来。它只会在我执行适当的vagrant halt然后vagrant up时显示。 Vagrant reload会导致整个应用崩溃。

我可以让代码更改的唯一方法>刷新网页>当我使用原生manage.py runserver

时,请参阅更改周期

但这意味着我无法在开发过程中轻松切换应用程序。我必须关闭一个,然后开始另一个。

如果我使用CakePHP或任何类型的PHP框架在同一个虚拟机中构建多个应用程序,我可以更改make代码>刷新页面>看到变化的发展周期。

在使用家庭操作系统编写代码时,如何在同一个虚拟机中实现多个Django应用程序的相同简易性?

2 个答案:

答案 0 :(得分:1)

以下代码片段将使用Django的自动重载程序来检测代码更改,并在必要时挂钩到uWSGI以重新加载代码:

import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload

@timer(3)
def change_code_gracefull_reload(sig):
    if autoreload.code_changed():
        uwsgi.reload()

您可以在wsgi.py之前将此代码放入get_wsgi_application()文件中。装饰器将注册由uWSGI每3秒运行一次的函数。

Original source

答案 1 :(得分:0)

  

- 触摸重载

据我所知,这个arg用于特定配置.ini文件。 请尝试使用选项--py-autoreload 1

在开发阶段,我认为你可以直接使用Nginx代理默认runserverrunserver_plus(请查看django-extensions