我们尝试将旧服务器迁移到新服务器,但我们遇到了一些mod_python问题。
问题出在这个网页上:
http://auction.tinyerp.org/auction-in-europe.com/aie/
这是我们的apache2配置:
NameVirtualHost *
<VirtualHost *>
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
<Directory "/var/www/auction-in-europe.com/aie">
Options Indexes FollowSymLinks MultiViews
#AddHandler mod_python .py
PythonOption mod_python.legacy.importer *
SetHandler mod_python
PythonHandler mod_python.publisher
PythonDebug On
AllowOverride all
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ScriptAlias /bin/ /home/www/auction-in-europe.com/aie/bin/
ServerAdmin teamwork19@gmail.com
ErrorLog /home/logs/auction-in-europe.com/error_log
CustomLog /home/logs/auction-in-europe.com/access_log combined
ServerName auction-in-europe.com
ServerAlias www.auction-in-europe.com antique-in-europe.com www.antique-in-europe.com art-in-europe.com www.art-in-europe.com en.art-in-europe.com
ServerAlias en.antique-in-europe.com en.auction-in-europe.com fr.antique-in-europe.com fr.art-in-europe.com fr.auction-in-europe.com auction.tinyerp.org
#RewriteEngine on
#RewriteRule ^/(.*)\.html /index.py [E=pg:$1]
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
<Directory /home/www/postfixadmin>
</Directory>
</VirtualHost>
日志很空:
[Mon Oct 12 13:25:58 2009] [notice] mod_python: (Re)importing module 'mod_python.publisher'
[Mon Oct 12 13:25:58 2009] [notice] [client 212.166.58.166] Publisher loading page /home/www/auction-in-europe.com/aie/index.py
我真的不知道从哪里开始。
请帮忙!
答案 0 :(得分:0)
#!/usr/bin/python
import os, sys
base_dir = "/home/www/auction-in-europe.com/aie/"
sys.path.insert(0, base_dir)
import albatross
import sql_db
from albatross.apacheapp import Request
from albatross import apacheapp
from albatross.template import Content, EmptyTag, EnclosingTag
import string
import common
class AppContext(albatross.SessionFileAppContext):
def __init__(self, app):
albatross.SessionFileAppContext.__init__(self, app)
# path = os.environ.get('PATH_INFO','').split('/')
# path = filter(lambda x: x, path)
# self.module = path.pop(0)
# self.path = {}
# while path:
# val = path.pop()
# self.path[ path.pop() ] = val
def load_template_once(self, template):
new_template = os.path.join(self.lang_get(),template)
return albatross.SessionFileAppContext.load_template_once(new_template)
def load_template(self, template):
new_template = os.path.join(self.lang_get(),template)
return albatross.SessionFileAppContext.load_template(self,new_template)
def run_template_once(self, template):
new_template = os.path.join(self.lang_get(), template)
return albatross.SessionFileAppContext.run_template_once(self,new_template)
def run_template(self, template):
new_template = os.path.join(self.lang_get(), template)
return albatross.SessionFileAppContext.run_template(self,new_template)
def req_get(self):
return self.current_url()[len(self.base_url())+1:]
def args_calc(self):
path = self.current_url()[len(self.base_url())+1:].split('/')
path = filter(lambda x: x, path)
if not len(path):
path=['index']
self.module = path.pop(0)
self.path = {}
while path:
val = path.pop()
self.path[ path.pop() ] = val
def lang_get(self):
if self.request.get_header('host')[:3] in ('fr.','en.'):
return self.request.get_header('host')[:2]
try:
language = self.request.get_header('Accept-Language')
if language:
new_lang = language[:2]
if new_lang in ('fr','en'):
return new_lang
except:
return 'en'
return 'en'
def hostname_get(self):
if self.request.get_header('host')[-17:]=='art-in-europe.com':
return 'art'
elif self.request.get_header('host')[-21:]=='antique-in-europe.com':
return 'antique'
else:
return 'auction'
def module_get(self):
self.args_calc()
return self.module
def path_get(self, key):
self.args_calc()
return self.path[key]
class App(albatross.ModularSessionFileApp):
def __init__(self):
albatross.ModularSessionFileApp.__init__(self,
base_url = '/index.py',
module_path = os.path.join(base_dir, 'modules'),
template_path = os.path.join(base_dir, 'template'),
start_page = 'index',
secret = '(=-AiE-)',
session_appid='A-i-E',
session_dir='/var/tmp/albatross/')
def create_context(self):
return AppContext(self)
class alx_a(albatross.EnclosingTag):
name = 'alx-a'
def to_html(self, ctx):
ctx.write_content('')
albatross.EnclosingTag.to_html(self, ctx)
ctx.write_content('')
# Escape text for attribute values
def escape_br(text):
text = str(text)
text = string.replace(text, '&', '&')
text = string.replace(text, '', '>',)
text = string.replace(text, '"', '"')
text = string.replace(text, "'", '')
text = string.replace(text, "\n", '
')
return text
class alx_value(EmptyTag):
name = 'alx-value'
def __init__(self, ctx, filename, line_num, attribs):
EmptyTag.__init__(self, ctx, filename, line_num, attribs)
#self.compile_expr()
def to_html(self, ctx):
value = ctx.eval_expr(self.get_attrib('expr'))
format = self.get_attrib('date')
if format:
value = time.strftime(format, time.localtime(value))
ctx.write_content(value)
return
lookup_name = self.get_attrib('lookup')
if lookup_name:
lookup = ctx.get_lookup(lookup_name)
if not lookup:
self.raise_error('undefined lookup "%s"' % lookup_name)
lookup.lookup_html(ctx, value)
return
if self.has_attrib('noescape'):
ctx.write_content(str(value))
else:
ctx.write_content(escape_br(value))
app = App()
app.register_tagclasses(alx_a)
app.register_tagclasses(alx_value)
def handler(req):
return app.run(apacheapp.Request(req))
答案 1 :(得分:0)
那是index.py吗?我相信你正在混淆你的安装。如果您不想编写自己的处理程序,可以使用“PythonHandler mod_python.publisher”。您刚刚发布的文件包含一个处理程序,行:
def handler(req):
return app.run(apacheapp.Request(req))
这很难解决问题,但我相信你的apache配置应该更接近这个:
<Directory "/var/www/auction-in-europe.com/aie">
Order allow,deny
Allow from all
SetHandler python-program .py
PythonHandler index ## or what ever the above file is called without the .py
PythonDebug On
</Directory>
这将使所有对“/var/www/auction-in-europe.com/aie”的请求都由index.py处理。