图像未在Heroku上显示

pinkon5k  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(139)

我在Ruby on Rails Web应用程序的静态网页上有两个图像。这两个图像都在同一个位置:

/app/assets/images

除了某些属性外,两者的图像标记都是以相同的方式生成的:

<%= image_tag("logo.png", alt: "Logo", width: 150) %>

<%= image_tag("image.jpeg", alt: "image", class: "img-responsive") %>

在本地服务器上,这两个图像都可以正常工作,但是当我推入生产环境时,只显示第一个图像。

<img alt="Logo" width="150" src="/assets/logo-9e9dd9c19ef18b3ef26e23f11d73a8817af6cea78a5d9e1a34691d591a780987.png" />

<img alt="image" class="img-responsive" src="/images/image.jpeg" />

我不明白为什么一个有效而另一个无效?
就上下文而言,第一个图像是PNG和布局的一部分,在application. html. erb中呈现。第二个图像是生成到application. html. erb中的页面视图的一部分。这有什么区别吗?
有什么正确的方向吗?谢谢你的帮助。
此致!
强纳森

bvuwiixz

bvuwiixz1#

请尝试以下代码:

配置/环境/生产.rb

config.assets.compile = true

然后运行命令:

RAILS_ENV=production rake assets:precompile

然后将所有编译文件和menifest文件推送到heroku。

at0kjp5o

at0kjp5o2#

您似乎没有先行编译jpeg
请确保在config/initializers/assets.rb中有此行

Rails.application.config.assets.precompile += %w( *.jpg *.jpeg some-other.css some-other.js)
e5njpo68

e5njpo683#

真正的问题是,您的资产没有被预编译以用于生产。
作为一个新手,Rails附带了一个编译资产清单和管道中其他文件的任务,作为一个小的解释和教训可以学习。
编译后的资产会写入config.assets.prefix中指定的位置。默认情况下,这是/assets目录。
您可以在部署期间在服务器上调用此任务,以便直接在服务器上创建资源的已编译版本。
您可以从终端运行以下任务,以便在生产环境中显示映像或资产,并将其重新部署到hierarchic:
RAILS_ENV=production bin/rails assets:precompile
有关详细信息,请参阅Rails文档中的预编译资产
我希望这对你的学习有所帮助。

p1iqtdky

p1iqtdky4#

接受这个答案的困难在于,现在Heroku强烈建议您使用Heroku资产编译过程,而不是预编译。
我也遇到过类似的问题,在我的例子中,图像是用

<%= image_tag 'fig_2b', alt: 'graph' %>

这在开发中加载得很好,但在Heroku上加载不好。这是因为我没有指定文件扩展名。Heroku上的资产构建过程似乎更严格,需要正确的扩展名。解决方案是添加相关的扩展名,在本例中是.png,即。

<%= image_tag 'fig_2b.png', alt: 'graph' %>

我想知道问题中的jpeg文件的问题是否在于它应该有jpg扩展名。也许在那个时间点上,Heroku资产构建过程不识别jpeg
顺便说一句,我在Heroku上学习编译是很困难的。我曾经预编译过资产,但我遇到了一系列奇怪的问题。Heroku给我的建议是,只有对sprockets有很深的理解时才预编译。当我让Heroku进行编译时,我不再遇到这样的问题。

相关问题