【问题标题】:Rails app in Production doesn't load images?生产中的 Rails 应用程序不加载图像?
【发布时间】:2017-10-25 21:40:02
【问题描述】:

我刚刚准备好运行 Ubuntu 17.04、Apache2、Passenger、最新的 Ruby 和 Rails 的生产服务器。 当我浏览我的网站时,在 CSS 中用作背景图像的图像不会加载:

.firstrow {
  background-image: url("backdrop2.png");
}

错误:http://server.lan/assets/backdrop2.png

我想我必须在 CSS 中使用更多的 FQDN 来获取图像,但它是如何在开发中工作的?我应该在 CSS 中使用什么路径? 我还应该提到我使用 SASS。

【问题讨论】:

  • 错误 png 不加载??

标签: css ruby-on-rails sass


【解决方案1】:

您应该使用image-url helper。如果你使用的是 Sass,你可以用这个替换你的代码:

.firstrow { background-image: image-url("backdrop2.png"); }

这当然假设您的图像在 Rails 的图像assets search paths 之一中。默认情况下,Rails 资产管道将在以下位置搜索您的图像:

  • app/assets/images
  • lib/assets/images
  • vendor/assets/images

另外,请确保您的部署脚本在您的生产服务器上运行 rake assets:precompile RAILS_ENV=production。许多是自动完成的,但不是全部。

【讨论】:

  • 是的,我的图像在默认资产路径中,在 dev 中我可以工作,但在 Prod 中没有。一直在阅读 image-url helper 链接,那里有很好的帮助,所以谢谢!我试过你的例子,但没有成功。
  • 您可能在资产管道中遇到了配置问题。您可能需要确保您的部署脚本运行 bundle exec rake assets:precompile。大多数会自动执行,但不是全部。
【解决方案2】:

使用的资产路径应该更加动态以支持两种环境。

body {
  background: asset_url('background-image.png')
}

尝试在生产环境中运行 rake assets:precompile RAILS_ENV=production ,因为在 public/assets 文件夹中搜索默认资产(例如图像)。

当包含图片路径的DOM元素加载到页面中时,打开firebug并检查图片引用的路径,还可以参考日志检查最终访问的路径并与丢失的资产相关。

【讨论】:

  • Firebug 说图片应该在这里:这是一个进步,但仍然没有图像。
  • 嗯...在本地编译 sass 并将其推送到服务器之后,一切都变得松散了。
  • 嗯...在本地编译 sass 并将其推送到服务器后,一切都变得混乱了。 NoMethodError:未定义方法[]' for nil:NilClass 3.7.1/lib/sprockets/sass_processor.rb:124:in asset_path' 3.7.1/lib/sprockets/sass_processor.rb:137:in `asset_url'
  • 好的...我在 2 小时前提出了问题,我想我会再看一下它,现在它可以工作了...什么...使用 image-url 所以我想我'将其设置为解决方案。
猜你喜欢
  • 2013-03-14
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2015-10-02
  • 2014-03-31
相关资源
最近更新 更多