2012-02-14 1 views
4

単純なGAEアプリケーションは、1台のコンピュータ上でself.jinja2.render_template()に次のエラーを投げた。 PCS):ファイルにアクセスできない: 'templates/test.html'特定のディレクトリのjinja2テンプレートを使用

ERROR 2012-02-14 21:54:04,987 webapp2.py:1528] [Errno 13] file not accessible: 'templates/test.html' 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/scott/svn/GAE_branches/sample_broken_app/handlers.py", line 21, in get 
    self.render_response('test.html', **context) 
    File "/Users/scott/svn/GAE_branches/sample_broken_app/handlers.py", line 14, in render_response 
    rv = self.jinja2.render_template(_template, **context) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2_extras/jinja2.py", line 158, in render_template 
    return self.environment.get_template(_filename).render(**context) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/environment.py", line 719, in get_template 
    return self._load_template(name, self.make_globals(globals)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/environment.py", line 693, in _load_template 
    template = self.loader.load(self, name, globals) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/loaders.py", line 115, in load 
    source, filename, uptodate = self.get_source(environment, name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/loaders.py", line 165, in get_source 
    f = open_if_exists(filename) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/utils.py", line 224, in open_if_exists 
    return open(filename, mode) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 592, in __init__ 
    raise IOError(errno.EACCES, 'file not accessible', filename) 
IOError: [Errno 13] file not accessible: 'templates/test.html' 
ERROR 2012-02-14 21:54:04,991 wsgi.py:205] 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 193, in Handle 
    result = handler(self._environ, self._StartResponse) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1519, in __call__ 
    response = self._internal_error(e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/scott/svn/GAE_branches/sample_broken_app/handlers.py", line 21, in get 
    self.render_response('test.html', **context) 
    File "/Users/scott/svn/GAE_branches/sample_broken_app/handlers.py", line 14, in render_response 
    rv = self.jinja2.render_template(_template, **context) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2_extras/jinja2.py", line 158, in render_template 
    return self.environment.get_template(_filename).render(**context) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/environment.py", line 719, in get_template 
    return self._load_template(name, self.make_globals(globals)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/environment.py", line 693, in _load_template 
    template = self.loader.load(self, name, globals) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/loaders.py", line 115, in load 
    source, filename, uptodate = self.get_source(environment, name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/loaders.py", line 165, in get_source 
    f = open_if_exists(filename) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2/jinja2/utils.py", line 224, in open_if_exists 
    return open(filename, mode) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 592, in __init__ 
    raise IOError(errno.EACCES, 'file not accessible', filename) 
IOError: [Errno 13] file not accessible: 'templates/test.html' 
INFO  2012-02-14 21:54:05,006 dev_appserver.py:2884] "GET /test HTTP/1.1" 500 - 

アプリはちょうどです:

handlers.py:

import webapp2 

from webapp2_extras import jinja2 

class BaseHandler(webapp2.RequestHandler): 

    @webapp2.cached_property 
    def jinja2(self): 
     # Returns a Jinja2 renderer cached in the app registry. 
     return jinja2.get_jinja2(app=self.app) 

    def render_response(self, _template, **context): 
     # Renders a template and writes the result to the response. 
     rv = self.jinja2.render_template(_template, **context) 
     self.response.write(rv) 


class MyHandler(BaseHandler): 
    def get(self): 
     context = {'message': 'Hello, world!'} 
     self.render_response('test.html', **context) 

webapp2_config = {} 
webapp2_config['webapp2_extras.sessions'] = { 
    'secret_key': 'ef23fsdawe444', 
} 

application = webapp2.WSGIApplication([ 
    webapp2.Route(r'/test', handler=MyHandler, name='test'), 

], debug=True, config=webapp2_config) 

はapp.yamlを:

application: sampleapp 
version: 0-01 
api_version: 1 
runtime: python27 
threadsafe: false 

builtins: 
- remote_api: on 

handlers: 
- url: .* 
    script: handlers.application 

libraries: 
- name: jinja2 
    version: 2.6 

- name: webapp2 
    version: 2.3 

test.htmlを含むテンプレートディレクトリもあります。

私は別のディレクトリからアプリを実行すると、正常に動作します。

投稿者は私に別のディレクトリを試すヒントを与えましたが、webapp2_extrasのjinja2を使わないでバージョンのコードを実行していたオリジナルの何が問題なのか分かりません。

バージョン情報: OS X 10.6.8、 GoogleAppEngineLauncher:1.6.2、Pythonの :2.7.2

私はすべてを再インストールし、私PYTHONPATHを設定する "" 私の.bash_profileで、それのdidn何も変えない。

注:非公開のディレクトリ名のいくつかをデバッグ出力から除外しましたが、空白などはありませんでした。

他のいくつかは同様のerrorを持っていましたが、その修正は古いバージョンのものでした。私はあなたのこのエラーを取得しましたが、webapp2_extrasからJinja2のを使用せずに(私は

jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) 

のように、jinja_enviromentを自分で作成していた)はos.path

+1

そのファイルのアクセス許可は何ですか? – aschmid00

+0

すべてのフォルダとファイルのパーミッションが正常に表示されました。 '-rw-r -r - ' –

+0

別のディレクトリにチェックアウトしたところ、問題はなくなりました。何が働いていたのかまだ分かりません。 –

答えて

2

について何かがあるようです。私は、ドキュメントにだけだから私は、私は助けることができると思ったが、問題となった何を解決しようとした

jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader('templates')) 

を入れていることos.path.dirname(__file__)ことを無視して、それを解決しました。あなたは

を言ったときが、いくつか他の人が同様のエラーがあったが、その修正は、古いバージョンの ました。 os.pathについて何かがあるようです。

何を意味しましたか?コードの一部でos.pathを使用していますか? os.pathには問題があり、webapp2_extras.jinja2はそれを使用しないので、テンプレートディレクトリとして手書きされた 'templates'で環境を作成するだけです。 the sourceを確認してください。

だから、このコメントのどこかにヒントがあるかもしれません。がんばろう。

3

ルートフォルダとアプリ内で設定した任意のフォルダです。yamlはjinja2 FileSystemLoaderで動作しません

展開中は、現在ローカル開発サーバーになっていてもupload_dirの値がGAEインスタンスではなくCDNになりますが、App Engine SDKはロードできませんプロダクションで見つけられなかった場所からのファイル。