使用mod_wsgi在Apache2上使用jinja2和webapp2时发现模板错误

时间:2016-01-25 23:37:40

标签: python apache google-app-engine jinja2 webapp2

我现在正撞在墙上。我已经和我斗争了好几个小时了,我刚刚完成了这一天。我希望那里的某个人可以告诉我。

在使用mod_wsgi配置apache以尝试在本地运行带有jinja2 Python应用程序的webapp2(不使用gae开发人员服务器)后,我从服务器收到此错误,因此我可以放弃对于我所拥有的一些本地项目的gae我们现在不需要学习新的框架。

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/usr/local/lib/python2.7/dist-packages/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/var/www/exmqa/main.py", line 39, in get
self.render_template('index.html', name=self.request.get('name'))
File "/var/www/exmqa/main.py", line 35, in render_template
self.response.write(self.jinja2.render_template(filename, **template_args))
File "/usr/local/lib/python2.7/dist-packages/webapp2_extras/jinja2.py", line 158, in render_template
return self.environment.get_template(_filename).render(**context)
File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 812, in get_template
return self._load_template(name, self.make_globals(globals))
File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 774, in _load_template
cache_key = self.loader.get_source(self, name)[1]
File "/usr/local/lib/python2.7/dist-packages/jinja2/loaders.py", line 187, in get_source
raise TemplateNotFound(template)

TemplateNotFound:index.html

我不知道为什么。该应用程序在gae上工作正常,我按照我在网上找到的说明移动它,包括安装webapp2,jinja2,补丁和webob。我已经尝试了大约二十多个不同的建议或想法,这些建议或想法源于阅读SO和其他网站,并且仍然没有弄清楚为什么我继续看到这个。

作为参考,这是我目前的main.py:

#!/usr/bin/env python

import webapp2
from webapp2_extras import jinja2
from jinja2 import Environment, FileSystemLoader
import os
import sys
sys.path.insert(0, '/var/www/exmqa/modules')
import dmpautomation

template_dir = '/templates'
loader = FileSystemLoader(template_dir)
environment = Environment(loader=loader)

class BaseHandler(webapp2.RequestHandler):
    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    def render_template(self, filename, **template_args):
        self.response.write(self.jinja2.render_template(filename, **template_args))

class Home(BaseHandler):
    def get(self):
        self.render_template('index.html',     name=self.request.get('name'))

class Automation(BaseHandler):
    def get(self):
        self.render_template('dmpauto.html', name=self.request.get('name'))
    def post(self):
        IP = self.request.get("ipaddress")
        self.response.write(IP)
        callable(dmpautomation.autotest(IP))

class Soak(BaseHandler):
    def get(self):
        self.render_template('dmpsoak.html', name=self.request.get('name'))







app = webapp2.WSGIApplication([
    ('/', Home),
    ('/dmpauto', Automation),
    ('/dmpsoak', Soak)
], debug=True)

任何人都有任何建议我需要采取哪些不同的方式让jinja2模板在运行Python和webapp2的mod_wsgi环境的Apache2中运行?是否有一些我不知道并且一直缺少的Apache配置?什么,什么都有,这太荒谬了。

提前感谢您提出的任何建议。

已编辑:添加我的exmqa.conf文件(Apache配置文件)的内容,以获取可能提供的任何信息。从我在这里找到的信息中添加了两个<Directory>部分,并尝试对此进行调试。从我迄今为止能够找到的所有内容来看,我添加的Alias系列应该是所有需要的。我想知道是否有某个允许我直接访问文件的权限问题,而不是Apache的运行实例。我发现这很奇怪,因为apache2以root身份和www-data运行,我认为这样可以让它访问世界。显然,Apache不是我的专长。

LoadModule wsgi_module modules/mod_wsgi.so
WSGICallableObject app

<VirtualHost *:9000>
    ServerName exmqa
    ServerAlias exmqa.corp.uievolution.com

    ServerAdmin mcole@uievolution.com
    DocumentRoot /var/www/exmqa
    WSGIScriptAlias / /var/www/exmqa/modules/main.py

    <Directory /var/www/exmqa>
    Require all granted
    </Directory>

    <Directory /var/www/exmqa/templates>
    Require all granted
    </Directory>

    Alias /css/ /var/www/exmqa/css/
    Alias /images/ /var/www/exmqa/images/
    Alias /js/ /var/www/exmqa/js/
    Alias /scripts/ /var/www/exmqa/scripts/
    Alias /templates/ /var/www/exmqa/templates/

    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

0 个答案:

没有答案