当前位置:K88软件开发文章中心网站服务器框架django → 文章内容

Django 部署Django

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:19:22

(比如,为了开发)和第二个(为了产品)配置文件,第二个配置文件仅仅从基本的那个配置文件导入配置,并对需要定义的进行复写.使用一个单独的配置文件,此配置文件包含一个Python的逻辑判断根据上下文环境改变设置。我们将会在依次解释这几种方式首先,最基本的方法是定义两个单独的配置文件。 如果你是跟随之前的例子做下来的,那么你已经有了一个settings.py了,现在你只需要将它复制一份并命名为settings_production.py(文件名可以按照你自己的喜好定义),在这个新文件中改变DEBUG等设置。第二种方法比较类似,但是减少了许多冗余。 作为使用两个内容大部分相同的配置文件的替代方式,你可以使用一个文件为基本文件,另外一个文件从基本文件中导入相关设定。 例如# settings.pyDEBUG = TrueTEMPLATE_DEBUG = DEBUGDATABASE_ENGINE = 'postgresql_psycopg2'DATABASE_NAME = 'devdb'DATABASE_USER = ''DATABASE_PASSWORD = ''DATABASE_PORT = ''# ...# settings_production.pyfrom settings import *DEBUG = TEMPLATE_DEBUG = FalseDATABASE_NAME = 'production'DATABASE_USER = 'app'DATABASE_PASSWORD = 'letmein'此处,settings_production.py 从settings.py 导入所有的设定,仅仅只是重新定义了产品模式下需要特殊处理的设置。 在这个案例中,DEBUG 被设置为False,但是我们已经对产品模式设置了不同的数据库访问参数。 (后者将向你演示你可以重新定义 任何 设置,并不只是象 DEBUG 这样的基本设置。)最终,最精简的达到两个配置环境设定的方案是使用一个配置文件,在此配置文件中根据不同的环境进行设置。 一个达到这个目的的方法是检查当前的主机名。 例如:# settings.pyimport socketif socket.gethostname() == 'my-laptop': DEBUG = TEMPLATE_DEBUG = Trueelse: DEBUG = TEMPLATE_DEBUG = False# ...在这里,我们从python标准库导入了socket 模块,使用它来检查当前系统的主机名。 我们可以通过检查主机名来确认代码是否运行在产品服务器上。一个关键是配置文件仅仅是包含python代码的文件。你可以从其他文件导入这些python代码,可以通过这些代码执行任意的逻辑判断等操作。 如果你打算按照这种方案走下去,请确定这些配置文件中的代码是足够安全(防弹)的。 如果这个配置文件抛出任何的异常,Django都有可能会发生很严重的崩溃。重命名settings.py随便将你的settings.py重命名为settings_dev.py或settings/dev.py或foobar.py,Django 并不在乎你的配置文件取什么名字,只要你告诉它你使用的哪个配置文件就可以了。但是如果你真的重命名了由django-admin.py startproject 命令创建的settings.py文件,你会发现manage.py会给出一个错误信息说找不到配置文件。 那是由于它尝试从这个文件中导入一个叫做settings的模块,你可以通过修改manage.py 文件,将 import settings 语句改为导入你自己的模块,或者使用django-admin.py而不是使用manage.py,在后一种方式中你需要设置 DJANGO_SETTINGS_MODULE 环境变量为你的配置文件所在的python 路径.(比如’mysite.settings’)。DJANGO_SETTINGS_MODULE通过这种方式的代码改变后,本章的下一部分将集中在对具体环境(比如Apache)的发布所需要的指令上。 这些指令针对每一种环境都不同,但是有一件事情是相同的。 在每一种环境中,你都需要告诉Web服务器你的DJANGO_SETTINGS_MODULE是什么,这是你的Django应用程序的进入点。 DJANGO_SETTINGS_MODULE指向你的配置文件,在你的配置文件中指向你的ROOT_URLCONF,在ROOT_URLCONF中指向了你的视图以及其他的部分。DJANGO_SETTINGS_MODULE是你的配置文件的python的路径 比如,假设mysite是在你的Python路径中,DJANGO_SETTINGS_MODULE对于我们正在进行的例子就是’mysite.settings’。用Apache和mod_python来部署Django目前,Apache和mod_python是在生产服务器上部署Django的最健壮搭配。mod_python (http://www.djangoproject.com/r/mod_python/)是一个在Apache中嵌入Python的Apache插件,它在服务器启动时将Python代码加载到内存中。 (译注:Django 需要Apaceh 2.x 和mod_python 3.x支持。备注如何配置Apache超出了本书的范围,因此下面将只简单介绍必要的细节。 幸运的是,如果需要进一步学习Apache的相关知识,可以找到相当多的绝佳资源。 我们喜欢去的几个地方:开源的Apache在线文档,位于 http://www.djangoproject.com/r/apache/docs/Pro Apache,第三版 (Apress, 2004),作者Peter Wainwright, 位于http://www.djangoproject.com/r/books/pro-apache/Apache: The Definitive Guide, 第三版 (OReilly, 2002),作者Ben Laurie和Peter Laurie, 位于http://www.djangoproject.com/r/books/apache-pra/基本配置为了配置基于 mod_python 的 Django,首先要安装有可用的 mod_python 模块的 Apache。 这通常意味着应该有一个 LoadModule 指令在 Apache 配置文件中。 它看起来就像是这样:LoadModule python_module /usr/lib/apache2/modules/mod_python.so然后,编辑你的Apache配置文件添加一个重定向,例如:<Location "/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonDebug Off</Location>要确保把 DJANGO_SETTINGS_MODULE 中的 mysite.settings 项目换成与你的站点相应的内容。它告诉 Apache,任何在 / 这个路径之后的 URL 都使用 Django 的 mod_python 来处理。 它 将DJANGO_SETTINGS_MODULE 的值传递过去,使得 mod_python 知道这时应该使用哪个配置。注意这里使用 <Location> 指令而不是 <Directory> 。 后者用于指向你的文件系统中的一个位置,然而  指向一个 Web 站点的 URL 位置。 Apache 可能不但会运行在你正常登录的环境中,也会运行在其它不同的用户环境中;也可能会有不同的文件路径或 sys.path。 你需要告诉 mod_python 如何去寻找你的项目及 Django 的位置。PythonPath "['/path/to/project', '/path/to/django'] + sys.path"你也可以加入一些其它指令,比如 PythonAutoReload Off 以提升性能。 查看 mod_python 文档获得详细的指令列表。注意,你应该在成品服务器上设置 PythonDebug Off 。如果你使用 PythonDebug On 的话

上一页  [1] [2] [3] [4] [5] [6]  下一页


Django 部署Django