2017-07-12 4 views
0

に動作しますが、問題が何であるかを把握しようとしているいくつかの時間を費やしたが、coudlnt。ここでnginxのtry_filesディレクティブは奇妙な

は私が達成しようとしているものです:

ユーザーがJSファイルを要求すると、私はuglifiedコピーが共有メモリに存在するかどうかを確認し、それがない場合は、それを提供したいです。 uglifiedコピーがない場合は、私は通常のファイルを提供したいと思います。ここで

は、私が場所に持っているものです。

location ~/require/[a-z0-9]+/(.*) { 
    try_files /dev/shm/uglified/$1 /public/javascripts/$1; 
} 

あなたが見ることができるように、ユーザーがファイル/require/fe45be18b99f9099efbc98a71f67924aef72d58a/app/require-config.js

  1. を要求した場合、ファイル/dev/shm/uglified/app/require-config.jsが存在している場合我々は確認する必要があり、それならば、それを果たしますそうです。まあ、それはシンプルに見えますが、doesntの仕事1.

で提供していない場合

  • /public/javascripts/場所からファイルapp/require-config.jsをサーブ。 dev/shmpublicのすべてのファイルが存在します。

    しかし:try_filesディレクティブで、この場所は、最初のOT二場合dev/shmフォルダから

    1. ファイルは、どんなにを務めたことはありません。

    2. ファイルpublicからのファイルは、try_filesディレクティブの2番目の場所にのみ表示されます。

    私はちょうどディレクティブで場所の場所を変更するもののtry_files /dev/shm/uglified/$1 /public/javascripts/$1;は、

    try_files /public/javascripts/$1 /dev/shm/uglified/$1; doesntの仕事を動作します。

    誰でも、/ dev/shmのファイルが決して選択されなかった理由とtry_filesディレクティブの場所の順序が重要な理由についてアドバイスできますか? @Richardスミスコメントへ

  • +1

    'パラメータではなく、パス名としてURIを必要としtry_files'。パス名は、ドキュメントルート( 'root'ディレクティブで指定)から作成されます。おそらく、共有メモリーをドキュメント・ルートにマップまたはシンボリックリンクすることができます。 –

    +0

    ありがとうございます、あなたは解答を見つけるのに役立ちました –

    答えて

    0

    おかげで、私はそれを動作させるためにどのようにアウトfugured:

    #that's the basic location, where we just redirect request to /dev/shm/ location 
    location ~/require/[a-z0-9]+/(.*) { 
        echo_location /dev/shm/uglified/$1; 
    } 
    
    #that's location to serve files from shared memory 
    location ~ ^/dev/shm/uglified/(.*) { 
    
        #set the root 
        root /dev/shm/uglified/; 
    
        #try file in this file, if it does not exist, redirect to public location 
        try_files /$1 /public/javascripts/$1; 
    
    }