我在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)都正确提供。知道这里有什么不对吗?
顺便说一句,我在heroku上有另一个Rails 3.1应用程序,它运行得很好,所以我不认为这是链轮等问题。
谢谢。
答案 0 :(得分:27)
我遇到了同样的问题。在config/environments/production.rb
文件中,评论:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
相反,请:
config.action_dispatch.x_sendfile_header = nil # For Heroku
这也是推荐的方法。正如Heroku docs中所述。
适合我。
答案 1 :(得分:9)
我遇到了同样的问题。将production.rb文件配置更改为
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
来自
config.action_dispatch.x_sendfile_header = "X-Sendfile"
为我工作。因为Heroku在前面使用了nginx。
答案 2 :(得分:1)
我有这个问题因为我在使用HTML引用资产管道中的图像。例如:
<img src="/assets/hello.jpg" />
图像资源可以在本地工作,但不能在Heroku上工作。切换到使用Rails'image_tag
视图帮助程序解决了这个问题。例如:
<%= image_tag "hello.jpg" %>
答案 3 :(得分:0)
如果我没记错的话,使用资产管道中的图像可能会出现一些意外行为。为避免这种情况,您可以将其保留在public/
中,就像之前版本的rails一样。
参见讨论here。