title: Troubleshoot TemplateNotFound error from Flask under Gunicorn
body: <p>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.</p>
  
  <p>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:</p>
  
  <h2>install script</h2>
  
  <p>Starting with a bare Ubuntu 10.04 install, I run this to set up the server and pull in my code: <a href="https://github.com/total-impact/total-impact-deploy/blob/master/deploy.sh" rel="noreferrer">https://github.com/total-impact/total-impact-deploy/blob/master/deploy.sh</a>. Then I put this nginx config file at /etc/nginx/sites-available/total-impact:</p>
  
  <pre><code>server {
      location / {
          proxy_pass http://127.0.0.1:8000;
      }
  }
  </code></pre>
  
  <p>Finally, I navigate the app directory and run <code>gunicorn web:app</code>, and hit the server's IP address. This generates a 500 in the browser, and this output on the command line:</p>
  
  <h2>stack trace:</h2>
  
  <pre><code>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
  </code></pre>