19

Rails アプリでは、画像を返す必要があります。

次のように、ルートに 1x1.gif トラッキング ピクセルがあります。

 match "/_ctrack.gif" => "email_tracking_pixels#my_method"

コントローラーで:

def my_method
    send_data open('https://www.xxxxxx.com/images/1x1_transparent.gif') {|f| f.read }, :filename => '1x1_transparent.gif', :type => 'image/gif'
end

問題は、何らかの理由でこれがタイムアウトになることがあるということです。次のエラーで:

2011-03-07T20:08:36-08:00 heroku[router]: Error H12 (Request timeout) -> GET www.xxxxxxx.com/images/1x1_transparent.gif dyno=web.1 queue=0 wait=0ms service=0ms bytes=0
2011-03-07T20:08:36-08:00 app[web.1]: 
2011-03-07T20:08:36-08:00 app[web.1]: OpenURI::HTTPError (503 Service Unavailable):
2011-03-07T20:08:36-08:00 app[web.1]:   app/controllers/email_tracking_pixels_controller.rb:19:in `my_method'
2011-03-07T20:08:36-08:00 app[web.1]:   lib/rack/www.rb:7:in `call'

ローカルに保存されているこの画像を渡す方法と、 open を使用して自分のサーバーに Web コールバックを行う方法についてのアイデアはありますか?

ありがとう

4

2 に答える 2

48

代わりに send_file を使用する方がよいでしょうか?

send_file Rails.root.join("public", "file.gif"), type: "image/gif", disposition: "inline"
于 2012-02-21T19:23:42.627 に答える
17

public/_ctrack.gifファイルをに保存できず、ルートを削除して、基盤となる Web サーバーに画像を提供できない理由はありますか?

ディスクから画像を処理する必要がある場合はopen、ローカル ファイル名で次のように使用します。

send_data open("#{Rails.root}/path/to/file.gif", "rb") { |f| f.read } .......

rb、ファイルをopenおよびbinaryモードに設定します。

于 2011-03-08T04:14:09.143 に答える