我见过很多类似的问题,但我仍然失败了。我有 win XP、Apache 2.2、Django 1.4、Python 2.7 和 mod_wsgi 3.3。我要做的就是当您点击 bat 文件执行的页面并回显 hi。这在我在 django 内部开发服务器上运行时有效。但是当我到达 Apache 时,它失败了,并且在 error.log 中我收到了消息
系统无法写入指定的设备。
系统无法写入指定的设备。
系统无法写入指定的设备。
系统无法写入指定的设备。
系统无法写入指定的设备。
我在其他许多地方都没有看到这个错误。大多数人似乎得到“权限被拒绝”。我仍然认为权限是错误的。所以当我运行它是我在控制台中得到的 django 内部服务器:
验证模型...
使用设置 'testsite.settings'发现 0 个错误Django 版本 1.4
开发服务器正在 http://127.0.0.1:8000/ 上运行
使用 CTRL-BREAK 退出服务器。C:\Sites\cprm>echo hi
hi
[18/Sep/2012 14:58:45] "GET / HTTP/1.1" 200 63
这似乎很好。唯一让我失望的是我是从 /testsite 而不是 /cprm 运行的。我可以 cd .. 之前。无论如何,因为在内部服务器中它正在写入控制台,我想我需要在 apache 中做同样的事情。我不确定 apache 控制台在哪里。我尝试向 apache 日志文件添加权限,因为这是生成错误的地方。我不确定这是否等同于常规控制台。
我的 Apache 文件如下所示(忽略反引号):
<`VirtualHost *>
ServerName http://example.com:80
WSGIScriptAlias /cprm "C:/sites/cprm/wsgi.py"
WSGIScriptAlias /testsite "C:/sites/testsite/wsgi.py"
<Directory "C:/sites">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/logs">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<`/VirtualHost>
我的观点看起来像这样:
from django.http import HttpResponse
import datetime, os
def home(request):
os.system('C:/Sites/testsite/testsite/test.bat')
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
这基本上只是我尝试做的一个快速测试。
编辑
嗨,帕查。感谢您的回复。我现在已经阅读了一些关于这个主题的内容。所以我做了你指出的改变。我的 wsgi.py 文件如下所示:
导入操作系统、系统
path = 'C:/Sites/testsite'
如果路径不在 sys.path:
sys.path.append(path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testsite.settings")
sys.stdout = sys.stderr
print 'hi'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
然后,当我转到 error.log 时,我确实看到打印了“hi”。所以这很好。但是,带有 echo hello 的 test.bat 文件没有执行,我仍然收到相同的消息。并感谢您的许可建议。我现在不再使用虚拟。我还没有准备好。关于我可以尝试的任何其他想法?