Rails 4中使用image_tag无法在生产环境中提供图像

8

我将我的应用部署到生产环境中,发现使用image_tag无法提供图片服务,但是如果我使用asset_path则可以。我的图片位于app/assets/images目录下,在生产环境中进行了预编译,因此它们在public/assets目录下并具有像'image_name-fk3r23039423-0e9232.png'这样的名称。

当我查看生成的HTML代码时,我看到我的image_tag的src是

/images/logo

当使用asset_path时,会生成以下内容:

/assets/login-bg1-01eead5b47afcb7e0a951a3668ec3921e8df3f4507f70599f1b84d5efc971855.jpg

所以这是正确的。我想知道为什么我无法使用image_tag 'image-name'来提供图片服务?
这是我的production.rb文件内容:
config.serve_static_files = true

config.assets.compile = false

config.assets.digest = true

1
我们在GitLab上遇到了这个问题,链接为https://gitlab.com/gitlab-org/gitlab-ce/issues/28743。 - James EJ
2个回答

15

我通过为文件添加扩展名来解决了这个问题。也就是说,我做了这个操作:

<%= image_tag 'logo.png'%> # added .png 

我不知道为什么在开发中没有扩展名的情况下它不能正常工作。所以我猜这个标志图片现在是从应用程序资产中提供的,而不是从公共目录提供的。


我遇到了同样的问题。虽然我不知道为什么会发生这种情况。 - RafaelTSCS
2
这种情况发生是由于在开发过程中,当Rails在清单文件中找不到资产时,会转而使用另一种机制(环境解析器),它足够聪明,可以找出扩展名。但在生产环境中,此回退机制将不起作用。 - Mathiou

1

我曾经遇到过类似的问题,不同之处在于我必须将文件扩展名从jpeg更改为jpg,希望这能帮助到其他人。


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