1

今、app.yamlについての質問が多くて、検索して探したのですが、これは見つけられませんでした。

TLDR : 最初に完全な回答をお読みください。これは標準の application_readable:true ではありません。 私は基本的に、異なるルートを介して同じファイルにアクセスしたい. /static/img/pic.jpg AND /img/pic.jpg

使用事例

私は( fsouzaの作業に基づいて)フラスコアプリケーションを構築し、 gaeで動作するフラスコのサムネイル拡張を構築しようとしています(これは読み取り専用FSであるため、フラスコサムネイルをフォークし、現在展開しようとしています。)

だから私は必要です:

  • Python 経由で静的ファイルにアクセスできるので、その場で img を読み取ってサムネイルを作成できます。URLは例です。/STATIC/IMG/PIC.JPG
  • app.yaml を介して他のイメージ、css、js を配信します。URLは例です。/IMG/PIC.JPG

機能していないもの:

ローカルで動作していますが、展開後は動作しません。app.yaml は dev_appserver.py によってそれほど厳密に強制されていないと思います。

このシナリオのいずれかを機能させることができます。これは私の app.yaml が現在どのように見えるかです:

builtins:
- appstats: on
- admin_redirect: on
- deferred: on
- remote_api: on

- url: /css
  static_dir: application/static/css 

- url: /js
  static_dir: application/static/js 

- url: /img
  static_dir: application/static/img

- url: /static
  static_dir: application/static
  application_readable: true

- url: .*
  script: run.application.app

代わりにこれも試しました:

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

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

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

特定の js,css,img をコメントアウトすると、アプリケーションは application/static/img の img にアクセスし、そこからサムネイルを作成できます。ただし、/img/dont.need.thumbnail.jpg などの URL は提供されません。

この部分にコメントすると:

- url: /static
  static_dir: application/static
  application_readable: true

img、css、js は、本来あるべきように提供されます。

誰でも私を助けることができますか?私が間違っていることは何ですか?

app.yaml の URL は再帰的ですか?

現在の回避策:

私の現在の回避策は、Python アプリケーションでいくつかの URL ルートを追加するだけです。しかし、それは効率的ではなく、より多くの CPU 時間を消費し、遅くなると思います。例えば

app.add_url_rule('/img/<path>', 'static_img_files', view_func=views.static_img_files)
def static_img_files(path):
    return static_files("img/"+path)

ボーナスヒント:

git push-to-deploy だけの場合

application_readable: true

動作しないため、ローカルではなく gae サーバーでテストするとすぐに、python アプリケーションは静的イメージにアクセスできなくなります。アプリ エンジン ランチャーを介してデプロイする必要があります (これだけで、私は見つけるのに何年もかかりました)

4

2 に答える 2

1

答えは非常に簡単です。すべてのアクセス パスを application_readable にすることです。

- url: /img
  static_dir: application/static/img
  application_readable: true           # <---- !!!!!

- url: /static
  static_dir: application/static
  application_readable: true

自分の言葉を食べるようなものです。それはapplication_readable:trueの単純なケースです:)

于 2014-12-21T10:05:07.420 に答える
0

あなたが探している答えは、app.yaml docでの構成の静的ディレクトリ ハンドラーセクションにあります。

を探しapplication_readableます。その属性を に設定するとtrue、クォータを犠牲にして両方の長所を活用できます (この方法でマークされた静的ファイルは 2 つの異なる場所にアップロードする必要があるため)。

実際の例で更新

これを本質的なものに落とし込みました。

app.yaml

application: example
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /dir1
  static_dir: dir1
  mime_type: text/plain

- url: /dir2
  static_dir: dir2
  mime_type: text/plain
  application_readable: true

- url: .*
  script: main.app

main.py

import webapp2

class Test(webapp2.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    for path in ['dir1/file1.txt', 'dir2/file2.txt']:
      try:
        with open(path) as f:
          self.response.out.write(f.read())
      except IOError:
        pass

app = webapp2.WSGIApplication([(r'/', Test)])

dir1/file1.txt

Content1

dir2/file2.txt

Content2

それらのコンテンツに移動して表示できるはずですが、移動する/dir1/file1.txtと後者のファイルしか表示されません。例を簡単にするために、画像ではなくテキスト ファイルを使用しました。その詳細は重要ではありません。dir2/file2.txt/

(LinuxでGAE SDK 1.9.17を使用しています)

于 2014-12-20T18:03:11.293 に答える