Rails Production 未将 relative_url_root 附加到图像
Posted
技术标签:
【中文标题】Rails Production 未将 relative_url_root 附加到图像【英文标题】:Rails Production not appending relative_url_root to image 【发布时间】:2022-01-18 01:53:53 【问题描述】:我的应用程序foobar
有一个相对路径。例如:https://my_main_app.com/foobar
在 config/environments/production.rb 中,我使用以下设置说明了这一点:
config.relative_url_root = '/foobar'
我的css、js、图片资源都在assets目录下:
+-- app
| +-- assets
| +-- images
| +-- my_img.jpg
| +-- javascripts
| +-- application.js
| +-- stylesheets
| +-- application.css.scss
我运行rake assets:precompile RAILS_ENV=production
,一切似乎都可以编译。 css、javascript 和图像都被放入 public/assets 目录并附加摘要:
.
| +-- app
| +-- public
| +-- assets
| +-- application-<digest1234>.css.gz
| +-- application-<digest3456>.js.gz
| +-- my_img-<digest5678>.jpg
当我访问应用程序时:
CSS 效果很好 js 效果很好 图片是 404 未找到。加载资源失败:服务器响应状态为 404(未找到)https://my_main_app.com/assets/my_img-.jpg
我知道问题是什么:问题在于图像:它没有附加 foobar 的相对路径。图片的正确路径是:
https://my_main_app.com/foobar/assets/my_img-<digest5678>.jpg
其他细节:
我正在像这样加载文件。在app/views/layouts/application.html.erb
内我有这行:
<div id="header"></div>
然后在app/assets/stylesheets/application.css.scss
我有这行:
#header
background-image: image-url('my_img.jpg');
background-repeat: no-repeat;
height: 100px;
background-size: 100%;
所以看起来当资产被编译时,它不知道相对路径。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:我让它工作了,但我事先做了很多事情。我不清楚到底是什么伎俩。以下是我知道我做过的事情:
我完全清除了我的 cookie 和缓存。
我删除了public/assets
的图片
我重新启动了应用服务器(乘客)。
我重新编译了资产,但这次我对命令做了一些微小的调整(使用rails
而不是rake
,并且我在前面指定了环境变量)。
RAILS_ENV=production rails assets:precompile
我不清楚到底是什么伎俩,但我把它放在这里以防万一有人遇到同样的问题。
【讨论】:
以上是关于Rails Production 未将 relative_url_root 附加到图像的主要内容,如果未能解决你的问题,请参考以下文章
Rails 的 production.log 会记录 HTTP 408 请求吗?
Rails 4 - 如何在 /config/environments/production.rb 文件中使用常量?
如何从heroku中的rails应用程序获取完整的production.log?