我已经使用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应用程序的相同简易性?
答案 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秒运行一次的函数。
答案 1 :(得分:0)
- 触摸重载
据我所知,这个arg用于特定配置.ini
文件。
请尝试使用选项--py-autoreload 1
。
在开发阶段,我认为你可以直接使用Nginx代理默认runserver
或runserver_plus
(请查看django-extensions
)