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 资产