JRuby on rails 3.x に小さなアプリがあり、パブリック フォルダー外のファイル システムに格納されているユーザー イメージを返す必要があります。これらのリクエストに応答するために別のコントローラーを使用することが、それらを取得するための最良の方法であると考えました。2 つまたは 3 つの画像では問題なく動作しますが、6 つまたは 7 つを超える画像を表示するページでは、5 つほどの画像が返されて停止します。残りの画像は表示されません。応答を適切に閉じていない可能性があることをどこかで読みましたが、正直なところ、それが何を意味するのか、どのように修正するのかわかりません。アプリは webrick の下で問題なく動作しますが、Tomcat に WAR ファイル (warbler によって作成された) としてデプロイされると、この動作を示します。Tomcat がすべての同時リクエストを処理できないようです。最初の数枚の画像が返された後、ブラウザは数分間スピンして次の画像を待ち、その後あきらめます。「ページの読み込みを停止する」ボタンを押すと、Tomcat がまだ拘束されているように、別のページに移動できないことがわかります。
routes.rb には次のものがあります。
match '/serve_image/:account/:user/:file' => 'images#serve'
私のイメージ コントローラー コードは非常に単純です。
class ImagesController < ApplicationController
def serve
path = "#{Rails.application.config.cir}/#{params[:account]}/#{params[:user]}/#{params[:file]}"
send_file( path,
:disposition => 'inline',
:type => 'image/jpeg',
:x_sendfile => true )
end
end
erb ファイルでは、次のように呼び出されます。
<img class="porto_image" alt="image"
src="<%=porto_image.image_filename.html_safe%>"
/>
porto_image 関連コード:
def image_filename
ret = "#{Rails.application.config.cir_web_prefix}serve_image/#{account}/#{user}/#{self.image_file}"
ret
end
では、なぜこれがいくつかの画像でしか機能しないのに、同じページから 10 ~ 20 の画像呼び出しを投げると失敗するのか、何か考えはありますか?
どんな助けでも大歓迎です、これは私を困惑させてブロックしました。