Rails 不会在生产模式下加载我的图像资产

Posted

技术标签:

【中文标题】Rails 不会在生产模式下加载我的图像资产【英文标题】:Rails doesn't load my images' assets in production mode 【发布时间】:2015-11-20 13:34:33 【问题描述】:

我的 Rails 应用程序在 Elastic Beanstalk 上的生产中有问题。 在本地一切都很好,但是当我部署时,我的所有图片都找不到(404)。我把所有图片都放在 app/assets/images 中。

我尝试更改我的 config/environments/production.rb 中的 config.serve_static_files,但 true 或 false 都不起作用。

我正在将 ruby​​ 堆栈与Passenger 一起使用。单实例。

平台:运行 Ruby 2.2 的 64 位 Amazon Linux 2015.03 v2.0.0(Passenger Standalone)

感谢您的帮助!

朱利安

【问题讨论】:

你运行的是什么版本的 Rails?您在使用资产管道吗?如果是这样,您确定在部署到生产环境之前已将生成的资产提交到您的存储库吗? 我正在运行 Ruby 2.2(本地和生产)。我刚刚检查了一下,公共文件夹中没有任何生成的文件。奇怪的是我有 2 个其他具有相同结构的 rails 应用程序,我没有这个问题。这是我主页上的图像调用示例: 哦,好吧!我需要提交这些文件 如何调试:选择一个图像。查看 chrome 检查器,或在您使用的任何浏览器中的等效项,查看类似 img 或样式或任何具有丢失图像路径的内容。相对于应用程序的公用文件夹,该图像是否在您的服务器上?或者,如果 url 是 aws url,那么该文件在那里吗?它是否在设置为私有的存储桶中? 我的图像是相对于 rails 实例的。让我们以 logo.png 为例。文件在这里:app/assets/images/logo.png。当我尝试使用server/assets/logo.png 直接从浏览器调用此图像时,我得到一个带有rails 错误页面的404(您要查找的页面不存在)。在我的日志中,我有一个 RoutingError,没有路由匹配... 【参考方案1】:

前几天我遇到了几乎相同的问题。我在我的 css 中引用了一个 .jpg 文件作为背景图像,但它给了我一个 404。

  background-image: url('background2.jpg'); //worked locally but not on AWS EB

在开发终端中检查代码时,我注意到它实际上是在请求“/assets/background2.jpg”,但我认为当 Rails 在资产文件夹中提供图像时,它通常会在文件后用长字符串重命名它们名称(例如“/assets/background2-b438af190a4.........jpg”)

就我而言,使用asset_path 有所帮助。注意:因为我在 css 中使用它,所以我不得不将文件扩展名更改为 scss。

  background-image: url(asset_path("background2.jpg")); // .scss file

【讨论】:

以上是关于Rails 不会在生产模式下加载我的图像资产的主要内容,如果未能解决你的问题,请参考以下文章

rails - 在生产模式下找不到 application.css 资产

Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?

vue生产模式下静态资产url中的“localhost”

Rails 5生产资产管道CSS未呈现

为啥 Rails 找不到我的资产?

在生产中加载webpacker资产