14

私は多くの興味深いルーティングの問題を解決してきました-リクエストURLをハッシュに変換するなどですが、好奇心から、ルーティングシステムに特定のURLの下にあるものが欲しいことを伝える方法はありますか?サブパスは文字通り提供されます-コントローラーを経由せずに?

たとえば、/home/me/public_html/rails_proj/images/foo.jpg と .../rails_proj/images/other/bar.jpg がある場合、「画像の下にあるものはすべてデフォルトの MIME タイプのオブジェクトとして機能しましたか?」

面白いかもしれません。

4

5 に答える 5

16

「images」ディレクトリをRailsアプリの「public」フォルダ(例:/ public / images /)に配置すると、Webサーバーが正しく構成されていない限り、MIMEタイプに問題はありません。

あなたの例によると、アプリのルートに画像ディレクトリが必要です。Railsでこれらの画像を表示する方法はないと思いますが、本当に必要な場合は、mod_rewriteを使用して機能させることができます。繰り返しになりますが、画像が正しいMIMEタイプであることを確認するのはWebサーバー次第です。

于 2009-02-10T06:34:46.280 に答える
6

パブリックディレクトリから提供されるものはRailsを経由せず、サーバーによって処理されるだけです(おそらくapache)。Railsシステムを介して画像を提供する必要がある唯一の理由は、誰が画像にアクセスできるかを何らかの方法で制御したい場合です。他のすべてを公開してalaにアクセスするだけです:siteurl.whatever / images/*。jpg

于 2009-02-10T06:36:58.113 に答える
5

私は通常、nginx をフロントエンドとして使用し、Apache/Passenger をバックエンドとして使用します。Ngingx はすべての Rails リクエストを Apache にプロキシしますが、すべての静的コンテンツ自体を処理します。英語の nginx wikiで例を確認してください。以下は、nginx 構成の一部を抜粋したものです。

server {
    listen 80;
    server_name www.domain.com;
    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js)$ {
        root   /path/to/static/assets/dir;
    }
    location / {
        proxy_pass http://127.0.0.1:81;
    }
}

そのため、ポート 81 でリッスンするように apache を設定して、nginx によってプロキシされた Rails リクエストを処理し、nginx が静的コンテンツを配信できるようにします。nginx は、静的コンテンツの配信において Apache よりも高速であると考えられているだけでなく、すべての画像、スタイルシート、javascript、またはその他の静的コンテンツについて、Rails アプリケーションの負荷を軽減します。

于 2009-02-11T08:41:22.933 に答える
3

この問題を解決する最も簡単な方法は、ビューに表示する画像のパスを提供するimage_pathヘルパーメソッドを使用することだと思います。たとえば、/assets/images/logo.pngの下にあるlogo.pngを参照する場合は、image_path('logo.png')を使用できます。

于 2012-07-17T14:35:03.220 に答える