ruby-on-rails - Rails 6/webpacker ...如何让背景图像在开发和 Heroku 上都可以工作?
问题描述
在 Rails 6 应用程序中,我在 app/assets/images/bgs/abc.jpg 中有一个图像文件
要将图像附加到body
背景,如何style
在 application.html.haml 的标签中添加样式声明,该样式声明对本地开发和推送到 heroku 时都一样?
由于我认为资产处理差异,在开发中工作,但不是 Heroku:
#application.html.haml
%style
body::after {
content: "";
background: url("/assets/bgs/abc.jpg"); ### WORKS DEVT ONLY ###
background-size: cover;
background-repeat: no-repeat;
opacity: 0.12;
top: 0;
left: 0;
bottom: 0;
right: 0;
position: absolute;
background-attachment: fixed;
z-index: -1;
}
我知道我应该使用asset_path,但这些在开发中都不起作用:
background: asset_path("/bgs/abc.jpg");
background: asset_path("bgs/abc.jpg");
background: asset_url("/bgs/abc.jpg");
background: asset_url("bgs/abc.jpg");
那里有大量不一致的信息,有些情况说使用asset-url或asset-path,有些情况说asset_url或asset_path,甚至有些情况说use url(~filename.jpg),有些说use background: some说背景图像。
有没有一种简单的方法可以使用在开发和 Heroku 上工作的完全相同代码的背景图像?
解决方案
Rails 在生产模式下会预编译资产,以便预编译资产文件夹(和子文件夹)上的所有图像并保存为image name-fingeprint
公共文件夹,例如:我有一个图像assets/images/bgs/pragmatic_programmer.jpg
,然后在运行命令后rake assets:precompile
,这个图像将变为/public/assets/bgs/pragmatic_programmer-9aa8a13ac97f205fe891bee7c42c6e711f997186d8975d5a4106ca2fe53ccc61.jpg
.
由于图像路径更改,您的应用程序在开发模式下工作而不是在生产模式下工作的原因,您可以通过ActionView::Helpers::AssetTagHelper#image_path
以下方式访问新编译的图像
#application.html.haml
%style
body::after {
content: "";
background: url(= image_path("bgs/abc.jpg"));
...
}
您可以在开发模式下进行测试,只需rake assets:precompile
在启动服务器之前运行。
推荐阅读
- java - 有没有办法在 JavaFX 的同一文本行中有两种不同的字体大小?
- python - 使用 Kafka-python 处理生产者和消费者
- ruby - 给定一个字符串,如何比较字符以查看是否有重复?
- javascript - JS如何提示用户启用通知
- api - 当我在 AirTicketRS 中收到“ACTIVE PQ RECORD REQUIRED”消息时该怎么办
- python - 如何使用 pandas 到 csv 分隔符作为空格且不双引号文本
- javascript - 用 promise 写文件返回 [object Promise]
- jquery - jQuery事件'on'另一个自定义事件?
- python - 为什么 bash 仍在搜索 conda?
- css - 打印 css 样式不适用于 Angular 项目