| 
 ySJ
 | 
     2.0/chapter12/#299 | 
     
 2010-04-20 18:52:27 
 | 
     
 在以传统的方式的几种以mod_*方式嵌入到Apache的脚本语言中(常见的例如:PHP,Python/mod_python和Perl/mod_perl),他们都是以Apache扩展模块的方式将自身嵌入到Apache进程中的。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#295 | 
     
 2010-04-20 18:48:17 
 | 
     
 但于mod_python不同之处是它并不是作为模块运行在Web服务器同一进程内的,而是有自己的独立进程。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#292 | 
     
 2010-04-20 18:46:08 
 | 
     
 Web服务器把请求(以socket形式)传给FastCGI,FastCGI执行代码,然后把响应返回给Web服务器,继而又发回给客户端浏览器。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#291 | 
     
 2010-04-20 17:32:35 
 | 
     
 借助于FastCGI,外部应用程序可以解释WEB服务器上的动态页面请求呢?
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#284 | 
     
 2010-04-20 17:29:42 
 | 
     
 尽管使用Apache和mod_python搭建Django环境是最具健壮性的,但在很多虚拟主机平台上,往往只能使用FastCGI。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#272 | 
     
 2010-04-20 17:27:05 
 | 
     
 逐个去掉这些imports,直到不再崩溃,这样就能找到引起问题的那个模块。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#271 | 
     
 2010-04-20 17:26:41 
 | 
     
 如果这些导致了崩溃,你就可以确定是import的Django代码引起了问题。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#269 | 
     
 2010-04-20 17:26:17 
 | 
     
 下一个步骤应该是编辑一段测试代码,把你所有Django相关代码import进去,包括你的views,models,URLconf,RSS配置,等等。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#258 | 
     
 2010-04-20 17:23:24 
 | 
     
 详情请见expat导致Apache崩溃 <reference name="http://www.djangoproject.com/r/articles/expat-apache-crash/" refuri="http://www.djangoproject.com/r/articles/expat-apache-crash/">http://www.djangoproject.com/r/articles/expat-apache-crash/</reference>.
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#255 | 
     
 2010-04-20 17:22:25 
 | 
     
 这时,基本上 <emphasis>总是</emphasis>由以下两个与Django本身无关的原因其中之一所造成:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#250 | 
     
 2010-04-20 17:14:27 
 | 
     
 (当然,这些信息是难看且难以阅读的,不过mod_python就是这么工作的。)
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#250 | 
     
 2010-04-20 17:14:17 
 | 
     
 当然,这些信息是难看且难以阅读的,不过mod_python就是这么工作的。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#241 | 
     
 2010-04-20 16:41:03 
 | 
     
 在所有这些例子中,你必须设置 <literal>DocumentRoot</literal> ,这样Apache才能知道你存放静态文件的位置。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#232 | 
     
 2010-04-20 16:39:25 
 | 
     
 不过,如果你没有其他选择,只能在Django所在的Apache <literal>VirtualHost</literal> 上服务media文件,这里你可以针对这个站点的特定部分关闭mod_python:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#224 | 
     
 2010-04-20 16:37:12 
 | 
     
 更多的信息请参见 <reference name="http://docs.python.org/lib/module-logging.html" refuri="http://docs.python.org/lib/module-logging.html">http://docs.python.org/lib/module-logging.html</reference> 。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#217 | 
     
 2010-04-20 16:23:38 
 | 
     
 因为 mod_python 缓存了载入的Python 的代码,所以当在 mod_python上发布 Django 站点时,你每改动一次代码就需要重启 Apache 一次。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#210 | 
     
 2010-04-20 16:20:26 
 | 
     
 使用 <literal>PythonInterpreter</literal> 指令来为不同的 <literal>location</literal>指定不同的解释器:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#206 | 
     
 2010-04-20 16:18:38 
 | 
     
 想实现这个,只要像下面这样使用 <literal>VirtualHost</literal>:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#199 | 
     
 2010-04-20 16:11:58 
 | 
     
 重启 Apache 之后所有对你的站点的请求(或者是当你用了 <literal></literal> 指令后则是虚拟主机)都会由 Django 来处理。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#204 | 
     
 2010-04-20 15:36:13 
 | 
     
 如果你是一个独立的 Web 开发人员,只有一台服务器并有多个不同的客户时,你可能会想这么做。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#197 | 
     
 2010-04-20 15:22:07 
 | 
     
 如果你使用PythonDebug On的话,在程序产生错误时,你的用户会看到难看的(并且是暴露的)Python对错误的追踪信息。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#196 | 
     
 2010-04-20 15:21:09 
 | 
     
 注意,你应该在产品服务器上设置 <literal>PythonDebug Off</literal> 。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#187 | 
     
 2010-04-20 15:19:44 
 | 
     
 在这里使用<literal>Directory</literal>没有意义。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#185 | 
     
 2010-04-20 15:18:25 
 | 
     
 注意这里使用 <literal>Location</literal> 指令而不是 <literal>Directory</literal> 。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#176 | 
     
 2010-04-20 14:27:28 
 | 
     
 然后,更改Apache配置文件,增加一个<literal>Location</literal>命令指出Django的安装路径。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#176 | 
     
 2010-04-20 14:27:07 
 | 
     
 然后,更改Apache配置文件,增加一个<literal></literal>命令指出Django的安装路径。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#159 | 
     
 2010-04-20 14:06:06 
 | 
     
 幸运的是,如果需要进一步学习Apache的相关知识,你可以找到相当多的绝佳资源。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#152 | 
     
 2010-04-20 14:05:18 
 | 
     
 代码在Apache进程的整个生命周期内驻留在内存中,这对服务器调度有着非常积极的意义。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#144 | 
     
 2010-04-20 13:59:05 
 | 
     
 DJANGO_SETTINGS_MODULE是你的配置文件的Python的路径。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#142 | 
     
 2010-04-20 13:38:34 
 | 
     
 DJANGO_SETTINGS_MODULE指向你的配置文件,而你的配置文件指向你的ROOT_URLCONF,在ROOT_URLCONF中指向了你的视图以及其他的部分。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#141 | 
     
 2010-04-20 13:36:36 
 | 
     
 在每一种环境中,你都需要告诉Web服务器你的DJANGO_SETTINGS_MODULE是什么,这是你的Django应用程序的入口。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#135 | 
     
 2010-04-20 13:26:31 
 | 
     
 那是由于它尝试从这个文件中导入一个叫做settings的模块,你可以通过修改manage.py 文件,将 import settings 语句改为导入你自己的模块,或者使用django-admin.py而不是使用manage.py,在后一种方式中你需要设置 DJANGO_SETTINGS_MODULE 环境变量为你的配置文件所在的Python 路径(比如'mysite.settings')。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#132 | 
     
 2010-04-20 13:23:33 
 | 
     
 随便将你的settings.py重命名为settings_dev.py或settings/dev.py或foobar.py,Django 并不在乎你的配置文件叫什么名字,只要告诉它你使用哪个配置文件就可以了。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#128 | 
     
 2010-04-20 13:20:25 
 | 
     
 如果这个配置文件抛出任何异常,Django有可能发生很严重的崩溃。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#128 | 
     
 2010-04-20 13:20:07 
 | 
     
 如果这个配置文件抛出任何异常,Django有可能会发生很严重的崩溃。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#128 | 
     
 2010-04-20 13:19:56 
 | 
     
 如果这个配置文件抛出任何的异常,Django有可能会发生很严重的崩溃。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#127 | 
     
 2010-04-20 13:19:36 
 | 
     
 如果你打算采用这种方案,请确定这些配置文件中的代码是足够安全(防弹)的。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#126 | 
     
 2010-04-20 13:18:43 
 | 
     
 关键是配置文件仅仅是包含Python代码的文件。你可以从其他文件导入这些Python代码,可以通过这些代码执行任意的逻辑判断等操作。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#123 | 
     
 2010-04-20 13:14:44 
 | 
     
 在这里,我们从Python标准库导入了<literal>socket</literal>模块,使用它来检查当前系统的主机名。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#119 | 
     
 2010-04-20 13:12:59 
 | 
     
 达到这个目的,一个方法是检查当前的主机名。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#118 | 
     
 2010-04-20 13:12:34 
 | 
     
 最后,最精简的达到两个配置环境设定的方案是使用一个配置文件,在此配置文件中根据不同的环境进行设置。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#116 | 
     
 2010-04-20 12:34:19 
 | 
     
 (后者向你演示可以重新定义 任何 设置,并不只是象 DEBUG 这样的基本设置。)
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#104 | 
     
 2010-04-20 11:17:11 
 | 
     
 我们将会依次解释这几种方式。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#102 | 
     
 2010-04-20 11:16:32 
 | 
     
 使用一个单独的配置文件,此配置文件包含一个Python的逻辑判断,它根据上下文环境改变设置。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#98 | 
     
 2010-04-20 11:02:02 
 | 
     
 建立两个全面的,彼此独立的配置文件。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#93 | 
     
 2010-04-20 10:59:06 
 | 
     
 settings.py文件由django-admin.py startproject命令生成。但是当你准备要进行部署的时候,你将发现你需要多个配置文件以使你的开发环境和产品环境相独立。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#92 | 
     
 2010-04-20 10:56:46 
 | 
     
 在此书中,我们仅仅处理一个单一的设置文件。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#85 | 
     
 2010-04-20 10:52:51 
 | 
     
 MANAGERS使用和ADMINS 同样的语法。例如:
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#84 | 
     
 2010-04-20 10:52:34 
 | 
     
 如果你想激活这个特性,把SEND_BROKEN_LINK_EMAILS设置为True(默认为False),并设置你的MANAGERS为某个人或某些人的邮件地址,这些邮件地址将会收到报告连接中断错误的邮件。
 | 
      | 
    
    
     | 
 ySJ
 | 
     2.0/chapter12/#83 | 
     
 2010-04-20 10:22:19 
 | 
     
 如果你安装有CommonMiddleware(也就是说,在你的MIDDLEWARE_CLASSES设置包含了'django.middleware.common.CommonMiddleware'的情况下,默认就安装了CommonMiddleware),你就可以开启这个选项:有人在访问你的Django网站的一个非空的链接而导致一个404错误的发生和连接中断的情况,你将收到一封邮件.
 | 
      |