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/
так же, как предыдущие версии рельсов.
См. обсуждение здесь.