我已经编写了一个Django应用程序,现在我想在多台服务器上轻松部署。
基本安装是:
INSTALLED_APPS
settings.py
./manage.py collectstatic
这个特定的应用程序不需要使用数据库,但如果确实如此,我会使用南方并运行./manage.py migrate
,但这是另一个故事。
我遇到麻烦的部分是#2。我不想每次都手动编辑这个文件。更新它的最简单/最有效的方法是什么?
我以为我可以使用inspect
模块找到变量,然后以某种方式追加它,但我没有运气。 inspect.getsourcelines
找不到变量。
答案 0 :(得分: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 egg对于buildout非常有用。
答案 1 :(得分:1)
您可以使用bash修改settings.py。
#set $SETTINGS_FILE variable to full path of the your django project settings.py file
SETTINGS_FILE="/path/to/your/django/project/settings.py"
# checks that app $1 is in the django project settings file
is_app_in_django_settings() {
# checking that django project settings file exists
if [ ! -f $SETTINGS_FILE ]; then
echo "Error: The django project settings file '$SETTINGS_FILE' does not exist"
exit 1
fi
cat $SETTINGS_FILE | grep -Pzo "INSTALLED_APPS\s?=\s?\[[\s\w\.,']*$1[\s\w\.,']*\]\n?" > /dev/null 2>&1
# now $?=0 if app is in settings file
# $? not 0 otherwise
}
# adds app $1 to the django project settings
add_app2django_settings() {
is_app_in_django_settings $1
if [ $? -ne 0 ]; then
echo "Info. The app '$1' is not in the django project settings file '$SETTINGS_FILE'. Adding."
sed -i -e '1h;2,$H;$!d;g' -re "s/(INSTALLED_APPS\s?=\s?\[[\n '._a-zA-Z,]*)/\1 '$1',\n/g" $SETTINGS_FILE
# checking that app $1 successfully added to django project settings file
is_app_in_django_settings $1
if [ $? -ne 0 ]; then
echo "Error. Could not add the app '$1' to the django project settings file '$SETTINGS_FILE'. Add it manually, then run this script again."
exit 1
else
echo "Info. The app '$1' was successfully added to the django settings file '$SETTINGS_FILE'."
fi
else
echo "Info. The app '$1' is already in the django project settings file '$SETTINGS_FILE'"
fi
}
使用:
add_app2django_settings "my_app"