gpt4 book ai didi

python - 在 Apache 上部署 Django 时出错

转载 作者:可可西里 更新时间:2023-11-01 11:41:27 26 4
gpt4 key购买 nike

我有一个小型 Django 网站,我试图在 Apache 2.2 HTTP 服务器上运行。该应用程序使用“python manage.py runserver”运行良好。

Django 版本:1.0.2 final
python :2.5
操作系统:Windows 2000

我没有完成 documentation 中描述的步骤经过一些摆弄之后,在我的 httpd.conf 中出现了以下内容。

<Location "/therap/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonOption django.root /therap
PythonDebug On
PythonPath "['D:/therap/therap'] + sys.path"
</Location>

MaxRequestsPerChild 1

D:\therap\therap 在我的 manage.py 所在的地方。

当我尝试在浏览器中打开时,我看到 Django 使用的样式错误(与白色背景上的黑色信使相反。)

ImportError at /

No module named therap.urls

Request Method: GET
Request URL: http://****:8080/
Exception Type: ImportError
Exception Value:

No module named therap.urls

Exception Location: C:\python25\lib\site-packages\django\core\urlresolvers.py in _get_urlconf_module, line 200
Python Executable: C:\Programme\Apache Software Foundation\Apache2.2\bin\httpd.exe
Python Version: 2.5.1
Python Path: ['D:/therap/therap', 'C:\\WINNT\\system32\\python25.zip', 'C:\\Python25\\Lib', 'C:\\Python25\\DLLs', 'C:\\Python25\\Lib\\lib-tk', 'C:\\Programme\\Apache Software Foundation\\Apache2.2', 'C:\\Programme\\Apache Software Foundation\\Apache2.2\\bin', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\pyserial-2.2', 'C:\\Python25\\lib\\site-packages\\win32', 'C:\\Python25\\lib\\site-packages\\win32\\lib', 'C:\\Python25\\lib\\site-packages\\Pythonwin', 'C:\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode']
Server time: Mo, 23 Mär 2009 16:27:03 +0100

在D:\therap\therap中有一个urls.py。但是在我的大部分代码所在的 D:\therap\therap\main 中没有。

然后我尝试使用父文件夹

<Location "/therap/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE therap.settings
PythonOption django.root /therap
PythonDebug On
PythonPath "['D:/therap'] + sys.path"

</Location>

MaxRequestsPerChild 1

这给了我一个不同的错误:

MOD_PYTHON ERROR

ProcessId: 2424
Interpreter: '***'

ServerName: '****'
DocumentRoot: 'C:/Programme/Apache Software Foundation/Apache2.2/htdocs'

URI: '/therap/'
Location: '/therap/'
Directory: None
Filename: 'C:/Programme/Apache Software Foundation/Apache2.2/htdocs/therap'
PathInfo: '/'

Phase: 'PythonHandler'
Handler: 'django.core.handlers.modpython'

Traceback (most recent call last):

File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)

File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1128, in _execute_target
result = object(arg)

File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 228, in handler
return ModPythonHandler()(req)

File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 201, in __call__
response = self.get_response(request)

File "C:\python25\Lib\site-packages\django\core\handlers\base.py", line 67, in get_response
response = middleware_method(request)

File "C:\python25\Lib\site-packages\django\middleware\locale.py", line 17, in process_request
translation.activate(language)

File "C:\python25\Lib\site-packages\django\utils\translation\__init__.py", line 73, in activate
return real_activate(language)

File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 209, in activate
_active[currentThread()] = translation(language)

File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 198, in translation
default_translation = _fetch(settings.LANGUAGE_CODE)

File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 183, in _fetch
app = __import__(appname, {}, {}, [])

ImportError: No module named main

我确实使用了国际化模块,但此时我不明白为什么它会导致问题。

“main”是唯一的 Django 应用程序(包含 View 、模型、表单等)的名称。完整路径为 D:\therap\therap\main。

我将 __init__.py 文件放在从主文件夹到 d:\therap 的所有位置。

现在我不知道我还能做什么。有什么想法吗?

最佳答案

问题是您正在导入您的应用程序(“main”),就好像它直接存在于 Python 路径中,而您的 URLconf(“therap.urls”)就好像它存在于 Python 上的“therap”模块中小路。这只有在“D:/therap”和“D:/therap/therap”都在 Python 路径上时才有效(runserver 会自动为您“让事情变得简单”;尽管它最终只是延迟了困惑,直到部署时间)。您可以通过在 Apache 配置中使用以下行来模拟 runserver 的行为:

PythonPath "['D:/therap', 'D:/therap/therap'] + sys.path"

标准化您的引用可能更有意义,因此您的 Python 路径只需要包含一个或另一个。通常的方式(至少是我经常看到的方式)是将“D:\therap”放在 Python 路径上,并将您的应用程序限定为“therap.main”,而不仅仅是“main”。就我个人而言,我采用了相反的方法并且效果很好:将“D:\therap\therap”放在您的 Python 路径中并将 ROOT_URLCONF 设置为“urls”而不是“therap.urls”。这样做的好处是,如果将来你想让你的“主”应用程序可重用并将其移出特定项目,你对它的引用不会与项目名称“therap”相关联(尽管应用程序名为“main”,这听起来不像是在考虑可重复使用的应用程序。

关于python - 在 Apache 上部署 Django 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com