我现在正撞在墙上。我已经和我斗争了好几个小时了,我刚刚完成了这一天。我希望那里的某个人可以告诉我。
在使用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>