Troubleshoot TemplateNotFound error from Flask under Gunicorn
flask, gunicorn, installation, nginx, python
Solution
Are your templates in [app root]/templates/?
If so, check to be sure your path is correct. Put this as the first line in the view that handles your homepage:
return app.root_path
If that's what you expect to see - or if you're using Blueprints or another method that changes the default Jinja Environment somehow - it's a little more complicated.
Oddly, Jinja doesn't seem to have a jinja2.Environment.FileSystemLoader.get_search_path() method. I assumed it would have one :(
Problem
I've got a Flask app that I'm trying to deploy using Gunicorn and nginx. However, although it works fine locally, it throws a TemplateNotFound error when I run in with Gunicorn on my remote server. I'm not sure how to even start debugging this, let alone why it's failing...would love help on the former, if not the latter. I thought maybe it was a permissions issue, so chmod'd the templates folder to 777...no luck. Here's all the relavant details: install script Starting with a bare Ubuntu 10.04 install, I run this to set up the server and pull in my code: https://github.com/total-impact/total-impact-deploy/blob/master/deploy.sh. Then I put this nginx config file at /etc/nginx/sites-available/total-impact: ``` server { location / { proxy_pass http://127.0.0.1:8000; } } ``` Finally, I navigate the app directory and run `gunicorn web:app`, and hit the server's IP address. This generates a 500 in the browser, and this output on the command line: stack trace: ``` root@jc:/home/ti/total-impact-webapp/totalimpactwebapp# gunicorn web:app2012-05-28 23:15:06 [15313] [INFO] Starting gunicorn 0.14.3 2012-05-28 23:15:06 [15313] [INFO] Listening at: http://127.0.0.1:8000 (15313) 2012-05-28 23:15:06 [15313] [INFO] Using worker: sync 2012-05-28 23:15:06 [15316] [INFO] Booting worker with pid: 15316 2012-05-28 23:15:12,274 - totalimpactwebapp.core - ERROR - Exception on / [GET] Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 1292, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 1062, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 1060, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 1047, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/home/ti/total-impact-webapp/totalimpactwebapp/web.py", line 60, in home return render_template('index.html', commits=False) File "/usr/local/lib/python2.6/dist-packages/flask/templating.py", line 120, in render_template return _render(ctx.app.jinja_env.get_template(template_name), File "/usr/local/lib/python2.6/dist-packages/jinja2/environment.py", line 719, in get_template return self._load_template(name, self.make_globals(globals)) File "/usr/local/lib/python2.6/dist-packages/jinja2/environment.py", line 693, in _load_template template = self.loader.load(self, name, globals) File "/usr/local/lib/python2.6/dist-packages/jinja2/loaders.py", line 115, in load source, filename, uptodate = self.get_source(environment, name) File "/usr/local/lib/python2.6/dist-packages/flask/templating.py", line 61, in get_source raise TemplateNotFound(template) TemplateNotFound: index.html ```