Django本地到生产设置:只需更改manage.py?

时间:2016-12-01 21:37:01

标签: python django

目前我的manage.py文件已经过硬编码,可以导入我的local.py - 开发设置文件。这是设置此问题的“行业标准”方式吗?当我部署到服务器时,我只是将manage.py更改为指向我的生产设置文件吗?或者我应该以另一种方式设置它?

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    # Hard coded imports local settings file
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

结构:

project/
   manage.py
   settings/
      local.py
      shared.py
      production.py

3 个答案:

答案 0 :(得分:2)

没有。 manage.py对于在生产中运行Django没有任何帮助,所以更改它根本不会有任何帮助。

答案 1 :(得分:1)

我认为您希望尽可能避免编辑manage.py.

另一种处理方法是使用默认的settings.py文件,但要使用第二个local_settings.py文件对其进行扩展。

您可以将以下内容放在settings.py文件的末尾:

locset = os.path.join(os.path.dirname(__file__), 'local_settings.py')
if os.path.exists(locset):
    with open(locset) as f:
        code = compile(f.read(), "local_settings.py", 'exec')
        exec(code)

我通常将DEBUG和数据库设置保留在此local_settings.py文件中。

执行此操作时,您应确保将local_settings.py添加到.gitignore

我还将此文件的示例版本与settings.py文件一起添加为local_settings.py.sample减去任何敏感密码/用户名信息。

这个文件包含在repo中,所以新的人可以创建他们的数据库/用户,只需填写缺少的部分。他们只需要将它重命名为.sample扩展名,它们就可以了。

这是一种简单有效的方法,可以为不同的环境设置变体设置,无论是本地,生产还是本地团队成员之间。

答案 2 :(得分:0)

我的应用程序有一个设置文件,但是这些值是从配置文件中读取的,而不是硬编码的。例如,DATABASES部分如下所示:

import ConfigParser

config = ConfigParser.ConfigParser()
config.read('app.conf')

DATABASES = {
    'default': {
        'ENGINE': config.get('database', 'engine'),
        'NAME': config.get('database', 'name'),
        'USER': config.get('database', 'user'),
        'PASSWORD': config.get('database', 'password'),
        'HOST': config.get('database', 'host'),
        'PORT': config.get('database', 'port'),
    }
}

开发和生产服务器各自获得自己的app.conf文件(从版本控制中排除这是一个很好的附带好处)。