13

Gunicornとnginxを使用してデプロイしようとしているFlaskアプリがあります。ただし、ローカルでは正常に機能しますが、リモートサーバーでGunicornを使用して実行すると、TemplateNotFoundエラーがスローされます。

なぜ失敗するのかは言うまでもなく、これをデバッグし始める方法さえわかりません...後者ではないにしても、前者の助けが欲しいです。おそらくそれは権限の問題だと思ったので、テンプレートフォルダを777にchmodしました...運が悪かったです。関連するすべての詳細は次のとおりです。

インストールスクリプト

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
4

3 に答える 3

30

テンプレートは [アプリ ルート]/templates/ にありますか?

その場合は、パスが正しいことを確認してください。これを、ホームページを処理するビューの最初の行として配置します。

return app.root_path

それが期待される場合、またはブループリントまたはデフォルトの Jinja 環境を何らかの方法で変更する別の方法を使用している場合は、もう少し複雑です。

奇妙なことに、Jinja には jinja2.Environment.FileSystemLoader.get_search_path() メソッドがないようです。私はそれが1つあると思いました:(

于 2012-06-15T16:57:18.103 に答える
0

私は非常によく似た状況で2時間を過ごしたばかりで、最終的に解決策となったものを投稿すると思いました.

それまで正常に動作していた本番環境の Flask アプリケーションから、Apache ログに TemplateNotFound エラーが突然表示されました。これにより、サイト全体で 500 件のエラーが発生しました。

最初の問題は、Flask の「デバッグ」フラグをオンにしない限り、TemplateNotFound エラーが表示されなかったことinfoです。

アプリを「ローカルで」実行する (Flask がリッスンするlocalhost:5000) ことは問題ありませんでした (を介してページをテストできますwget 127.0.0.0:5000)。メインの Web アプリの Python コードのコピーが、あるべき場所の上のディレクトリにどういうわけか配置されていたことが判明しました。これは最初に wsgi によってインポートされたため、テンプレートへの相対パスが正しくありませんでした。

于 2012-09-07T21:40:10.527 に答える