在mod_python下使apache服务器正常运行的问题

时间:2009-10-12 13:46:01

标签: python apache2 mod-python

我们尝试将旧服务器迁移到新服务器,但我们遇到了一些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

我真的不知道从哪里开始。

请帮忙!

2 个答案:

答案 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处理。