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?

Rails Production - 如何设置密钥库?

rake assets:precompile RAILS_ENV=production 不能按要求工作

rails 6 jquery not working in production 错误说 $ 没有定义