为Django构建自动化

时间:2011-08-11 22:44:56

标签: python django build build-automation

我很擅长为我的开发和django框架做系统管理员的事情。我希望为我的本地开发站和我的生产环境提供不同的用户名/密码。

我正在使用dotcloud作为服务器。我可以编写一个安装后脚本(在python,bash,无论如何),它会在每次新推送时执行它。

但我不知道怎么回事。我需要自己写这个吗?是否有一个python / django构建自动化工具,可以帮助我吗?

澄清:如何在服务器上将settings.py中的debug=false更改为true?

2 个答案:

答案 0 :(得分:3)

django标准方法是使用environmanet变量DJANGO_SETTINGS_MODULE。将其指向不同的设置,并让两者都为常见事物导入公共设置模块:

# settings_production.py

from settings_common import *
DEBUG = False
DATABASES = {...}


# settings_development.py

from settings_common import *
DEBUG = True
DATABASES = {...}


# settings_common.py

INSTALLED_APPS = (...) # etc

您还可以使用另一种策略来使用一个主要设置,并根据某些系统条件导入另一个主要设置的名称,例如获取os.platform.node()socket.gethostname()并切换该值(或其中的一部分) )。

reversed_hostname_parts = socket.gethostname().split('.').reverse()
host_specific = {
    ('com', 'dotcloud'): 'production',
    ('local'): 'dev',
}

for index in range(len(reversed_hostname_parts)):
    identifier = tuple(reversed_hostname_parts[:index+1])
    if identifier in host_specific:
        extra_settings = host_specific[identifier]
        break
else: # executed when the loop has not been `break`ed
    extra_settings = 'dev'  # any default value


if extra_settings == 'dev':
    from development_settings import *
elif extra_settings == 'production':
    from production_settings import *

编辑:添加了链接

有关其他策略,请参阅https://code.djangoproject.com/wiki/SplitSettings

答案 1 :(得分:1)

如果我的项目驻留在本地目录结构中,我通常会在生产settings.py结束时导入我的开发设置。

您还可以将生产和开发中不同的数据库设置和其他设置存储在单独的文件中,并将其从SVN中移除,无论您使用什么,都可以将其删除。

只需在settings.py:

的末尾添加此内容即可
try:
  from myapp.specific_settings import *
except ImportError:
  pass

在这种情况下,specific_settings在生产和开发环境中会有所不同。

如果要在开发和生产服务器之间动态选择,请在设置结束时使用此选项:

import os
directory = os.path.dirname(__file__)
if directory == '/home/yourname/development/':
    from myapp.development_settings import *
else:
    from myapp.production_settings import * 

请注意,我在脑海中写下这个,可能会有一些错误。我回家后会核实。