2011-09-06 74 views
5

我写过一个Django应用程序,现在我想让它易于在多个服务器上部署。Django应用程序安装脚本 - 如何将应用程序添加到INSTALLED_APPS设置?

基本安装是:

  1. 复制app文件夹到Django项目文件夹
  2. 将它添加到INSTALLED_APPSsettings.py
  3. 运行./manage.py collectstatic

这种特殊的应用不需要使用数据库,但如果使用了,我会使用南部并运行./manage.py migrate,但这是另一回事。

我遇到麻烦的部分是#2。我不想每次都手动编辑这个文件。什么是最简单/最健壮的方式来更新?

我想我可以使用inspect模块来查找变量,然后以某种方式追加它,但我没有任何运气。 inspect.getsourcelines不会找到变量。

回答

2

这里是我的原因,我认为这将是错误的:

  • 它是没有什么大的需要额外的代码的复杂性,每一次添加一行来设置并不坏,特别是如果你正在做的一步#1和#3。
  • 它将变得不明确你的项目使用什么应用程序。当另一名开发人员在您的项目上工作时,他可能不知道您的应用程序已安装。
  • 您应该在代码版本控制系统上执行第1步和第2步,测试整个系统,然后提交更改并进行部署。

如果您正在寻找这样的“优化”,我认为您在开发/部署过程中出现了问题(从我的角度来看)。我认为使用INSTALLED_APPS更容易和更好。

如果你正在建造一些供公众使用的东西,并且你想尽可能简单地添加模块,那么它会很好。在这种情况下,我会建议将项目和它的应用程序打包为python egg并利用入口点。然后,您可以将应用部署到项目中,如下所示:

pip install my-app-name 

即使没有第1步和第3步!步骤#1将通过pip完成,步骤#2和#3将通过项目中定义的安装钩子来完成。

Paste script为切入点利用的一个很好的例子:

# Install paste script: 
pip install pastescript 

# install django templates for pastescript: 
pip install fez.djangoskel 

# now paste script knows about fez.djangoskel because of entry-points 

# start a new django project from fez's templates: 
paste create -t django_buildout 

这里是fez.djangoskel包的setup.py部分:

... 
entry_points=""" 
[paste.paster_create_template] 
django_buildout=fez.djangoskel.pastertemplates:DjangoBuildoutTemplate 
django_app=fez.djangoskel.pastertemplates:DjangoAppTemplate 
... 

zc.buildout是另一个伟大的工具,它可能使你的部署更容易。 Python鸡蛋搭建起来非常棒。

+0

(1)实际上它不仅仅是1行。这是在不同地方的几行。我可以用同样的方法来完成所有这些。1和3不会手动完成,它们也会自动完成。 (2)为什么不明确?该脚本会明确将其添加到INSTALLED_APPS。任何开发人员都可以通过查看settings.py来看到更新。 (3)不能。这是一个附加组件; settings.py可能会以我不想触及的其他方式进行更改,因此版本控制它不起作用。出于同样的原因,PIP将不起作用。我没有可以插入钩子的静态settings.py文件.-- – mpen

+0

- 因为settings.py由第三方维护。 – mpen

+0

@Mark,您可以拥有自己的设置文件,并且可以使用'from client_settings import *'加载第三方设置。然后,您可以动态修改INSTALLED_APPS属性。 – Ski

相关问题