Rails应用中的静态图像资源在Heroku生产环境中无法显示

5
我尝试使用以下命令在部署前编译图像: $ RAILS_ENV=production bin/rake assets:precompile 我在模板中使用的 image_tag 在开发中可以正常工作。
更新:据说在开发中 config.serve_static_files 默认为 true,但是在生产中会关闭,因为资产应该通过您的 Web 服务器提供。我目前只在 heroku 上使用免费版并且仍在运行 webrick,所以我将其设置为 true,但没有好结果。
更新2:当我将 config.serve_static_files 设置为 false 时,heroku 就无法看到我的任何资产,所有我的样式都消失了,图片也找不到。虽然 heroku 在推送到主分支时会发送警告消息,指出 "config.serve_static_files 只是启用 public 文件夹中的所有内容,并与资产管道无关"。我想这与资产管道无关,因为它只是提供了 public 文件夹中的资产,并没有查看我们的资产目录。我还看到 heroku 在部署时运行预编译命令,因此我不需要每次都这样做。
这让我想知道我使用 image_tag 调用资产的方式是否有问题,但我不确定为什么会这样?
更新3:资产管道的 rails 指南中说:“在常规视图中,您可以像这样访问 public/assets/images 目录中的图像:<%= image_tag "rails.png" %>。我按照这个约定调用我的图像,如此<%= image_tag("lab49", size: "80x30") %>,但图片仍然不会出现。
更新4:请看我的回答。

1
如果有用的话,我在fly.io上也遇到了同样的问题(即除了heroku之外的另一个平台)。因此,我认为这个问题与开发和生产有关(而不是特定于heroku)。 - stevec
2个回答

12

如果您正在使用Heroku,并且您使用的是图像文件扩展名,则Heroku将仅接受您的图像。

这将起作用:

<%= image_tag "lab49.png", size: "80x30" %>

这个方法不会起作用(尽管它在本地可以):

<%= image_tag "lab49", size: "80x30" %>

您,先生,是一位英雄! - Greg
确认这个解决方案在5.1.3上对我有效。谢谢兄弟! - PrimeTimeTran
很高兴能帮到你! - Jbur43

3

需要注意的事项: 我的assets / images文件夹中有jpeg文件。当我运行rake assets:precompile时,它们被转换为.jpg文件。在将它们重命名为.jpg后,在assets/images文件夹中预编译并再次提交后,它们可以在Heroku上正常显示。


同样的问题也发生在很多其他人身上。 - stevec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接