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错误的发生和连接中断的情况,你将收到一封邮件.
|
|