python - 解决 Gunicorn 下 Flask 的 TemplateNotFound 错误

标签 python nginx installation flask gunicorn

我有一个 Flask 应用程序,我正尝试使用 Gunicorn 和 nginx 进行部署。然而,尽管它在本地运行良好,但当我在远程服务器上运行 Gunicorn 时,它会抛出 TemplateNotFound 错误。

我什至不确定如何开始调试它,更不用说它失败的原因了……希望对前者有帮助,如果不是后者的话。我认为这可能是一个权限问题,所以将模板文件夹更改为 777……运气不好。以下是所有相关详细信息:

安装脚本

从裸 Ubuntu 10.04 安装开始,我运行它来设置服务器并引入我的代码:https://github.com/total-impact/total-impact-deploy/blob/master/deploy.sh .然后我把这个 nginx 配置文件放在/etc/nginx/sites-available/total-impact:

server {
    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

最后,我导航到应用程序目录并运行 gunicorn web:app,然后访问服务器的 IP 地址。这会在浏览器中生成一个 500,并在命令行上输出:

堆栈跟踪:

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

最佳答案

你的模板在[app root]/templates/吗?

如果是这样,请检查以确保您的路径正确。将其作为处理主页的 View 中的第一行:

return app.root_path

如果这是您希望看到的 - 或者如果您正在使用蓝图或其他以某种方式更改默认 Jinja 环境的方法 - 它会稍微复杂一些。

奇怪的是,Jinja 似乎没有 jinja2.Environment.FileSystemLoader.get_search_path() 方法。我以为它会有一个 :(

关于python - 解决 Gunicorn 下 Flask 的 TemplateNotFound 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792755/

相关文章:

python - discord.py 嵌入 youtube 视频而无需粘贴链接

python - 为什么 select 查询在 Python 中不执行,而在 MYSQL 中它有返回值?

python - 使用 BeatifulSoup find_all 时找不到元素

node.js - 如何在 docker 中使用 certbot 正确安装 ssl 证书?

azure 存储模拟器1603

python - 在格式化文本文件中查找一段文本

nginx - 如何使用 php-fpm 和 nginx 设置特定 IP 地址的内存限制和执行超时?

phpMyAdmin "Cannot log in to the MySQL server"与 PHP 7.0.0 RC7

python - 安装不包含 setup.py 的 python 库

java - 如何为java应用程序创建安装程序包以及在mysql中创建的数据库