X-Sendfile、NGinx、Rails の問題にイライラしています。いくつかのドキュメントとチュートリアルを読みましたが、要点がわかりません。
何をしようとしても、404 が返されます。これが NGINX の X-Sendfile 部分です。
location / {
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping /var/www/cube_storage/uploads/=/cdn; #maps a real path to the internal location
...
} # end of location app
location /cdn {
root /var/www/cube_storage/;
internal;
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping /var/www/cube_storage/=/cdn/;
}
Rails アプリで X-Accel-Redirect が有効になっています。
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
ファイルの提供を担当するコントローラーのコードは次のとおりです。
def image
@activity = AccountActivity.where(:id => params[:id]).first
if !@activity || !@activity.file_attachment_is_image? || @activity.file_attachment_name != requested_file_name()
l = Logger.new("#{Rails.root}/logs/cdn_activity.log")
l.info(params.inspect)
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => :not_found
else
begin
if !params[:version] || params[:version] == "original"
t = @activity.file_attachment # thats the original image!
else
t = @activity.file_attachment.send(params[:version])
end
send_file t.current_path ,:disposition => 'inline'
rescue Exception => ex
l = Logger.new("#{Rails.root}/logs/cdn_activity.log")
l.info("--------------------------")
l.info(Time.now.to_s)
l.info("exception -> #{ex.message}")
l.info("params: #{params.inspect}")
render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
end
end
終わり
ストレージエンジンとしてcarrierwaveを使用しています。たぶん誰かが私の間違いを見ただけかもしれませんが、私は数時間試した後でも見ません。
もう1つ、リクエストはdevelopment.logにも表示されません(はい、開発用にX-Accelも有効にしました)。
よろしく、アレックス