Rails 3.1 + Heroku Cedar - Статические изображения не подаются

Я развернул приложение Rails 3.1 на кедрах Героку. По какой-то причине мои статические объекты изображения не обслуживаются:

2011-06-23T18:14:13+00:00 app[web.1]: Started GET "/assets/me_reminder-30f9d1dead32e12238888adbee4b92d3.png" for 98.207.60.248 at 2011-06-23 18:14:13 +0000
2011-06-23T18:14:13+00:00 app[web.1]: Served asset /me_reminder-30f9d1dead32e12238888adbee4b92d3.png - 200 OK (0ms) (pid 1)
2011-06-23T18:14:13+00:00 app[web.1]: cache: [GET /assets/me_reminder-30f9d1dead32e12238888adbee4b92d3.png] miss, store
2011-06-23T18:14:13+00:00 heroku[router]: GET xxxx.herokuapp.com/assets/me_reminder-30f9d1dead32e12238888adbee4b92d3.png dyno=web.1 queue=0 wait=0ms service=35ms status=200 bytes=0

Как вы можете видеть, он возвращает что-то с 0 байтами. Излишне говорить, что изображение не отображается.

Однако все мои другие статические активы (css, javascripts) обслуживаются правильно. Любая идея, что может быть неправильно здесь?

Кстати, у меня есть еще одно приложение Rails 3.1 на heroku, которое работает отлично, поэтому я не думаю, что это проблема со звездочками и т.д.

Спасибо.

Ответ 1

У меня была та же проблема. В config/environments/production.rb файле, комментарий:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

И вместо этого:

config.action_dispatch.x_sendfile_header = nil # For Heroku

Это также рекомендуемый способ сделать это. Как указано в документах Heroku.

Работает для меня.

Ответ 2

У меня была та же проблема. изменение конфигурации файла production.rb на

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

из

config.action_dispatch.x_sendfile_header = "X-Sendfile"

работал у меня. поскольку Heroku использует nginx впереди.

Ответ 3

У меня была эта проблема, потому что я имел в виду образы в конвейе активов с использованием HTML. Пример:

<img src="/assets/hello.jpg" />

Активы изображения будут работать локально, но не на Heroku. Переключение на использование помощника просмотра Rails 'image_tag решило проблему. Пример:

<%= image_tag "hello.jpg" %>

Ответ 4

Если я правильно помню, может возникнуть непредвиденное поведение с использованием изображений в конвейере активов. Чтобы избежать этого, вы можете оставить их в public/ так же, как предыдущие версии рельсов.

См. обсуждение здесь.