2017-08-14 3 views
0

私の現在のルーティングテーブルは以下のようなものです:いくつかの静的フォルダを持つTornadoの静的ファイルハンドラを処理する方法は?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/css/(.*)", StaticFileHandler, { 
      "path": "my-website-path/css" 
     }), 
     ("/js/(.*)", StaticFileHandler, { 
      "path": "my-website-path/js" 
     }), 
     ("/fonts/(.*)", StaticFileHandler, { 
      "path": "my-website-path/fonts" 
     }) 

私は私の静的ファイルを処理するために、唯一の正規表現を使用したいと思います。 次のようなものがありますか?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/(css|js|fonts)/(.*)", StaticFileHandler, { 
      "path": "my-website-path/$1" 
     }) 

どうすればいいですか? ありがとうございます。

+0

たぶん私って、実は...私は竜巻のルートは正規表現をサポートしてかなり確信しているが、静的な資産を提供するためにnginxの/アパッチを使用すると、より最適な –

+0

をしたいフォルダを指定するStaticFileHandlerをサブクラス化してみてください他の解決策がない場合は、StaticFileHandlerをサブクラス化します。竜巻ルートは確かに正規表現をサポートしています。私は、竜巻自体がプロジェクトのすべてのファイルを扱うことを好むでしょう。 –

+0

良いでしょうあなたが – M07

答えて

1

RequestHandlerは、すべての一致をhttp-verb機能の定位置引数として渡します。 StaticFileHandlerがそれを拡張し、キャプチャされた2つのグループを持っているため、コードは期待どおりに機能しません。そう正規表現を変更する必要があり、ステップバイステップ:

  1. 一致パス全体:/(.*)
  2. 最初の部分は、フォント、JSまたはCSSにすべきである:((jss|css|fonts)/.*
  3. インナー基が捕捉されるべきではない - を利用します?:の:((?:jss|css|fonts)/.*

コード

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/((?:css|js|fonts)/.*)", StaticFileHandler, { 
      "path": "my-website-path" 
     } 

(言及cricket_007 @など)StaitcFileHandler ...

がこのハンドラは、主に開発中の使用と軽ファイルサービス提供のために意図されていることを、覚えておいてください。大量のトラフィックに対しては、専用の静的ファイルサーバー(nginxやApacheなど)を使用する方が効率的です。部分的なコンテンツを返すためのHTTP Accept-Rangesメカニズムをサポートしています(一部のブラウザではHTML5のオーディオやビデオを探すためにこの機能が必要なため)。

+0

私はそれを知っていることを心配しないでくださいが、私は重い交通機関を持たないでしょう。ご協力いただきありがとうございます。それは魅力のように働く;) – M07

関連する問題