Rails 3: Ошибка потоковой передачи изображения: «изображение… не может быть отображено, поскольку оно содержит ошибки» - PullRequest
4 голосов
/ 02 июля 2011

В журнале написано:

Started GET "/assets/2/thumb" for 110.174.88.80 at Fri Jul 01 20:11:35 -0700 2011
  Processing by AssetsController#show as HTML
  Parameters: {"id"=>"2", "style"=>"thumb"}
[/home/misha_moroshko/myfamily.moroshko.com/public/images/thumb.jpg] found!
Sent file /home/misha_moroshko/myfamily.moroshko.com/public/images/thumb.jpg (0.2ms)
Completed 200 OK in 2ms

Если вы перейдете непосредственно к изображению, оно будет правильно выбрано.

Обратите внимание, что это упрощенный пример моей реальной проблемы.В реальном случае изображение находится не в папке public, но ошибка та же.

Что может вызвать такую ​​ошибку?


rails -v
=> Rails 3.0.1
ruby -v
=> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

Соответствующий код:

# config/routes.rb
match "assets/:id/:style" => "assets#show"

class AssetsController < ApplicationController
  def show
    path = Rails.root.join("public", "images", "thumb.jpg").to_s
    if File.exist?(path)
      logger.fatal "[#{path}] found!"
      send_file(path, { :type => "image/jpeg", :disposition => "inline" })
    else
      logger.fatal "[#{path}] not found!"
    end
  end
end

Ответы [ 2 ]

5 голосов
/ 02 июля 2011

Замена

config.action_dispatch.x_sendfile_header = "X-Sendfile"

с

config.action_dispatch.x_sendfile_header = "X-Accel-Redirect"

в config/environments/production.rb решена проблема!

0 голосов
/ 02 июля 2011

URL http://www.myfamily.moroshko.com/assets/2/thumb отправляет правильные заголовки, но не отправляет тело в ответе.Вы удалили код, который @amb предложил вам добавить?Похоже, что он входит в ваш else блок и просто регистрирует ошибку на вашей консоли.

...