用于生产和开发的 Django 项目设置

Posted

技术标签:

【中文标题】用于生产和开发的 Django 项目设置【英文标题】:Django project settings for production and development 【发布时间】:2017-07-21 11:15:12 【问题描述】:

在 Django 中,我已经使用从 repo 中拉取更新了我的 git。当我运行python3 manage.py collectstatic 时,它会抛出“myproject”数据库不存在。真的我没有 myproject 数据库,因为在生产中我只有 prod_project 数据库。但是,不知何故,django 试图从 base.py 加载 myproject 数据库,而不是从 prod.py 加载

# base.py
    DATABASES =                                                                         
            'default':                                                                      
                'ENGINE': 'django.db.backends.postgresql_psycopg2',                          
                'NAME': 'myproject',                                                       
                'USER': 'admin',                                                            
                'PASSWORD': '*****',
                'ATOMIC_REQUESTS': True,                                                              
            ,                                                                               
           

# prod.py
    from .base import *                                                                  

    DEBUG = False                                                                        
    TEMPLATE_DEBUG = DEBUG                                                               

    DATABASES =                                                                         
        'default':                                                                      
            'ENGINE': 'django.db.backends.postgresql_psycopg2',                          
            'NAME': 'prod_myproject',                                                       
            'USER': 'admin',                                                            
            'PASSWORD': '',                                                              
        ,                                                                               
                                                                                        

    try:                                                                                 
        from .local import *                                                             
    except ImportError:                                                                  
        pass

# local.py is empty file

我的项目在 apps/project/prod 文件夹中:

/.git
etc/
apps/
static/
myproject/
  settings/
    base.py
    prod.py.
    beta.py
  wsgy.py
manage.py

【问题讨论】:

如果你打开manage.py并查看里面的代码,你可以告诉它使用什么设置。您可以对其进行操作以在每个环境中使用正确的文件。 感谢您的回复。在 manage.py 中,它被写成 name == "main": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 【参考方案1】:

当我做 git pull 时,设置里面的__init__.py 也被改变了。我不知道。我认识的开发人员建议我检查这个文件。我发现不同的设置文件被设置为默认值。我纠正了它。现在它正在工作。

【讨论】:

【参考方案2】:

如果你分开这两个setting.py,你应该声明使用哪个settings.py!

您可以使用以下方法(mod_wsgi):

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'your_proj/settings_location/prod'

这会将 django 设置为使用特定的设置文件。

或者你可以在 shell 上这样做:

python manage.py collectstatic --settings=your_proj/settings_location/prod

这指定您需要的设置文件。

参考:https://docs.djangoproject.com/en/1.10/topics/settings/#on-the-server-mod-wsgi

【讨论】:

然后您可以在 wsgi.py 文件中添加该设置 :) 当你想使用这些设置时,只需添加到 manage.py 文件中! 在我的 wsgi.py 中写成 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings" 你能添加你的项目文件夹树吗(有问题)? 更新的文件夹树(不完整,但仅与问题有关)

以上是关于用于生产和开发的 Django 项目设置的主要内容,如果未能解决你的问题,请参考以下文章

Django基本配置

将 South 添加到 Django 项目、开发和生产中

在 Django 中处理生产迁移和开发迁移

django 本地和生产的几个设置

拥有用于开发和生产的连接字符串

为 Django 创建开发环境