我尝试在部署之前使用以下命令预编译我的图像:
$ RAILS_ENV=production bin/rake assets:precompile
我在开发中使用的模板中使用image_tag
。
更新:config.serve_static_files
在dev中默认为true,但之后在生产中关闭,因为资产应该通过您的Web服务器提供。我目前只是使用heroku上的免费套牌而且仍在运行webrick,所以我将此设置为true,但没有运气。
更新2:当我将config.serve_static_files
设置为false
时,heroku看不到我的任何资产,我的所有样式都消失了,图像仍然没有。虽然heroku确实发送了一条警告消息,告诉高手说所有“config.serve_static_files
确实能够提供公共文件夹中的所有内容,并且与资产管道无关。”我认为它与资产管道无关,因为它只是提供公共文件夹中的资产而不查看我们的资产目录。我还看到heroku在部署时运行预编译命令,所以我不需要每次都这样做。
这让我想知道我使用image_tag
调用资产的方式是否可能是问题,但我不确定为什么会这样?
更新3:资产管道的rails指南说:“在常规视图中,您可以访问public / assets / images目录中的图像,如下所示:<%= image_tag "rails.png" %>
。我正在使用此约定调用我的图像<%= image_tag("lab49", size: "80x30") %>
,但图片仍然无法显示。
更新4:看我的回答。
答案 0 :(得分:9)
如果你来到这篇文章并且你正在使用Heroku,只有你使用图像文件扩展名时,Heroku才会接受你的图像。
这将有效:
<%= image_tag "lab49.png", size: "80x30" %>
这不起作用(虽然它会在本地):
<%= image_tag "lab49", size: "80x30" %>
答案 1 :(得分:2)
需要注意的事项: 我的assets / images文件夹中有jpeg文件。当我运行rake资产时:预编译它们变成了.jpg文件。在我的assets / images文件夹中将它们重命名为.jpg,预编译,然后再次按下它们就显示在Heroku上就好了。