3

Rails アプリをホストするために、両方のインスタンスで Passenger を使用して Apache から nginx に移行しようとしています。アプリは画像のリクエストを受け取ります。画像が /system/logos/$requestedimage に存在する場合は、画像が提供されるか、Rails アプリにヒットして必要に応じて生成できるようにする必要があります (その画像がある場所)。 /system/logos にキャッシュされます)。

Apache では、以下を使用しました。

RewriteCond %{DOCUMENT_ROOT}/system/logos/%{REQUEST_FILENAME} -f
RewriteRule ^/(.*)$ http://assets.clg.eve-metrics.com/system/logos/$1

これはうまくいきました。資産。subdomain は別のサブドメインですが、ルートは同じで、Passenger のみが無効になっており、特に静的ファイルをホストするように設定されています (有効期限が切れます)。

nginx では、以下を使用しています。

server {
  listen 80;
  passenger_enabled on;
  server_name  clg.eve-metrics.com www.clg.eve-metrics.com;
  root /opt/www/clg/current/public;
  gzip             on;
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml text/css application/javascript;
  gzip_disable     msie6;
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
  }
  if (-f $document_root/system/logos$request_filename) { 
    rewrite ^/(.*)$ http://assets.clg.eve-metrics.com/system/logos/$1 break;
  }
}

これはうまくいきません。まったく、実際には。キャッシュされたパスにリダイレクトされることはなく、Rails アプリにヒットすることもありません。nginx が静的アセットであると想定しているため、Passenger に渡さないようです。アプリにヒットするようにこの動作を停止する方法はありますか?

4

2 に答える 2

4

私のレール アプリケーションは nginx とパッセンジャーで実行されています。Rails キャッシュ ディレクトリをデフォルトから に移動/publicしました/public/system/cache/。機能させるには、これを vhost 構成ファイルに挿入する必要がありました。

if (-f $document_root/system/cache/$uri/index.html) {
  rewrite (.*) /system/cache/$1/index.html break;
}

if (-f $document_root/system/cache/$uri.html) {
  rewrite (.*) /system/cache/$1.html break;
}

私も で動作させようとしたのを覚えていますが$request_filename、動作しませんでした。代わりに試してみて$uri、それが機能するかどうかを確認してください:-)

于 2009-07-24T16:48:52.973 に答える
0

ジェームズ、この構成ファイル https://gist.github.com/711913を試して 、この場所の構成に注意してください。

  location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
      access_log off;
      expires max;
      add_header Cache-Control public;
  }

適切な権限がある場合、乗客はRailsにアセットファイルを管理させません(nginxを実行するユーザーは、ファイルに直接アクセスする権限を持っている必要があります)

于 2010-12-03T05:24:48.223 に答える