2012-01-04 5 views
0

私はこれで初めてで、有料のWebサービスからGAE(静的なページは動的ではありません)への移行を計画しています。私はこの仕事をしようと無数の時間を費やしてきましたが、私は別のものを排除して1つの結果を達成し、その逆は逆であると私は信じています。Google App Engineの静的ページPython 2.5ディレクトリなど

私はそれが簡単な答えであり、私はいくつかの基本原則に違反していると確信しています。私が望むのは、アプリエンジンのページ(mygaeid.appspot.com)は静的なランディングページを提供し、他のページに接尾辞を追加して利用できることです。 mygaeid.appspot.com/oranges.html mygaeid.appspot.com/grapes.htmlなど

これを達成できないため、接尾辞を追加すると他のページを取得できません。 mygaeid.appspot.com/apples.html; mygaeid.appspot.com/oranges.htmlただし着陸ページではなく、やや異なるyamlでリンク先ページ(mygaeid.appspot.com)は動作しますが、他のページへのアクセスはありません(mygaeid.appspot.com/oranges.html)。等)に接尾辞が付いています。

PYファイル(abcdefg.py)は、以下で、続く2つの異なるyamlsに共通する:

次YAMLにランディングページ(mygaeid.appspot.com)作品を使用して
import os 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 
from google.appengine.ext.webapp import template 

class MainHandler(webapp.RequestHandler): 
    def get (self, q): 
    if q is None: 
     q = 'htmdir/apples.html' 

    path = os.path.join (os.path.dirname (__file__), q) 
    self.response.headers ['Content-Type'] = 'text/html' 
    self.response.out.write (template.render (path, {})) 


def main(): 
    application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True) 
    util.run_wsgi_app (application) 

if __name__ == '__main__': 
    main() 

完全に(apples.htmlの内容を提供しています)、私は接尾辞を追加するとページにアクセスできません。 mygaeid.appspot.com/apples.htmlまたはmygaeid.appspot.com/static/htmdir/apples.htmlなど、私はそれが機能しない接尾辞を追加するとすぐに。ディレクトリ(htmdir)に、他のhtmlページと共にapples.htmlを配置しました。 oranges.htmlなど、私はこのyamlでそれらのどれにもアクセスできません。

application: mygaeid 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /(.*\.(html)) 
    static_files: static/htmdir/\1 
    upload: static/htmdir/(.*\.(html)) 

- url: /css 
    static_dir: css 

- url: /js 
    static_dir: js 

- url: /images 
    static_dir: images 

- url: .* 
    script: abcdefg.py 

その後、ランディングページ(mygaeid.appspot.com)が動作しない、次のように私はYAMLを変更するが、私はサフィックスを追加するとき、それは、例えば、完全に動作している場合mygaeid.appspot.com/apples.html; mygaeid.appspot.com/oranges.htmlなどは、適切なページを配信:私は完全にディレクトリを省略し、(ディレクトリなし)同じabcdefg.pyを使用している場合

- url: /(.*\.(html)) 
    static_files: htmdir/\1 
    upload: htmdir/(.*\.(html)) 

は最後に次のように非常にシンプルなYAMLは実際に提供します私が望む結果ですが、すべてのファイルがルートディレクトリに詰め込まれているので、非常に扱いにくいです。

application: mygaeid 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /(.*\.(png|js|css)) 
    static_files: \1 
    upload: (.*\.(png|js|css)) 

- url: .* 
    script: abcedfg.py 

これを理解する上で、何か助けていただければ幸いです。


感謝woobleと感謝デイブ おかげで、私はまだ、再び戻って、慎重にWoobleのソリューションが動作ログを読み取るが、私は、静的なというディレクトリ内htmdir(つまり、HTMLが含まれている)を配置する必要がありました。 GAEは

あなたの助けとフィードバックは非常にあなたがapp.yamlを静的としてファイルを宣言した場合、彼らはあなたのアプリケーションのハンドラには使用できません

SiteDirectory 
-mygaeid 
    -static 
    -htmdir 
    -js 
    -css 
    -images 
app.yaml 
index.yaml 
(py file was removed) 

答えて

4

を高く評価され、静的なウェブサイトのための偉大な(そして無料)ソリューションです。 。

しかし、それらが本当に静的であれば、djangoテンプレートエンジンを使用してそれらを「レンダリング」するのは愚かです。 app.yamlにマッピングを追加するだけで、リンゴを表示するためのファイルを含む静的ファイルを表示できます。HTML /用:

application: mygaeid 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /(.*\.html) 
    static_files: static/htmdir/\1 
    upload: static/htmdir/.*\.html 

- url: /css 
    static_dir: css 

- url: /js 
    static_dir: js 

- url: /images 
    static_dir: images 

- url:/
    static_files: static/htmdir/apples.html 
    upload: static/htmdir/apples\.html 

(不要のpythonファイル)

+0

@Octavio:CSS/JS /イメージハンドラを含めるように答えを編集しました。 – geoffspear

1

Woobieは、正しい答えを持っています。それを違う言葉で言いましょう。

.htmlをstatic_filesに入れると、静的コンテンツの配信専用のサービスが提供されます。あなたのアプリはそれらのファイルを見ることができません。アプリは、リソースであるファイルのみを見ることができます。

Djangoテンプレートは静的ファイルではなく、リソースでなければなりません。そうしないと、アプリケーションはそれらを見ることができず、template.render(path, ...は失敗します。

あなたの問題を解決するための次のステップは、現在のapp.yamlを表示するように投稿を更新することです。また、アプリケーションのログに何が報告されているかを表示することもできます。

0

、それは非常にシンプルなトップ>下の手続きの方法でこのよう

app.yamlをコンフィグ機能を動作しますなぜ技術的な理由があります。

マッチングは次の順序で行われます

1. - url: /(.*\.(html)) 
    static_files: static/htmdir/\1 
    upload: static/htmdir/(.*\.(html)) 

2. - url: /css 
    static_dir: css 

3. - url: /js 
    static_dir: js 

4. - url: /images 
    static_dir: images 

5. - url: .* 
    script: abcdefg.py 

簡単に言えば、ファイルは、それがステップ1でマッチします.htmlの接尾辞があり、mygaeid.appspot.com/からその要求を再ルーティングしている場合.html to mygaeid.appspot.com/htmdir/ .html。ステップ5の* .htmlハンドラは、すべての* .htmlルートが既に話されているため、決してヒットしません。

さらに、回答が既にカバーされているので、静的としてマークされたディレクトリは、アプリケーションハンドラにローカルでは利用できません。なぜ私は技術的な理由に対処しようとします。

app.yamlは、GAEのリバースプロキシの設定ファイルとして機能します。静的ファイルはアップロード時にのみ変更され、キャッシュに最適です。静的ファイルを展開するときにキャッシュサーバーにすぐにプッシュすることで、GAEは読み込みパフォーマンスを向上させ、アプリケーションサーバーから不要な負荷を取り除きます。

静的リクエストは別々にカウントされ、通常のアプリリクエストよりもコストが低いという理由があります。静的ファイルをリクエストするたびに、GAEのCDNからファイルを取得することが基本的には必要です。静的ファイルのみを取得する場合、サーバーは最初にスプールアップする必要はありません。

このアプローチの明らかな欠点は、それらのファイルがアプリケーションと同じサーバー上に物理的に存在しないため、アプリケーションで直接取得またはアップロードできないことです。

注:その他の回答にも該当します。テンプレートフォルダに静的なマークを付けないでください。あなたのアプリケーションが隣接するディレクトリから取得するのではなく、テンプレートをロードするときには、Webリクエストを送信し、遠隔地からファイルを取得する必要があります。明らかに、ローカルファイルの代わりにリモートファイルを取得すると、読み込み時間と待ち時間が増加します。

関連する問題