Css 未加载Rails映像资产

Css 未加载Rails映像资产,css,ruby-on-rails,nginx,asset-pipeline,digital-ocean,Css,Ruby On Rails,Nginx,Asset Pipeline,Digital Ocean,我已经处理rails资产管道在生产中的复杂问题大约一周了。我终于差不多完成了。我在css文件中引用了两个图像 css文件正在预编译,预编译的图像将在文件中相应地引用 background:url(/assets/k-opacity-70-f75f0169dbfb178b3aedbf11429dfd68.png); #intro{background:#111 url(/assets/intro-bg-12afabffede338ee9a72dbff2488bfea.jpg) no-repeat

我已经处理rails资产管道在生产中的复杂问题大约一周了。我终于差不多完成了。我在css文件中引用了两个图像

css文件正在预编译,预编译的图像将在文件中相应地引用

background:url(/assets/k-opacity-70-f75f0169dbfb178b3aedbf11429dfd68.png);

#intro{background:#111 url(/assets/intro-bg-12afabffede338ee9a72dbff2488bfea.jpg) no-repeat center;
我已经根据Rails网站上的建议编辑了config/application.rb,以确保我正在预编译所有需要的文件

 config.assets.precompile << Proc.new do |path|
  if path =~ /\.(css|js)\z/
    full_path = Rails.application.assets.resolve(path).to_path
    app_assets_path = Rails.root.join('app', 'assets').to_path
    if full_path.starts_with? app_assets_path
      puts "including asset: " + full_path
      true
    else
      puts "excluding asset: " + full_path
      false
    end
  else
    false
  end
end

config.assets.precompile我认为您的问题在于:

background: url("<%= asset_path 'k-opacity-70.png' %>"); position: fixed; top: 0; left: 0; }
这将确保正确引用您的资产,尤其是当您将资产发送到服务器时。这听起来可能过于简单,但我们以前在Heroku(我知道您使用过)中遇到过问题,文件没有渲染,因为它们的指纹不正确

这可能会被否决(因为它与您的代码基本相同),但这对我们来说是有效的


指纹识别

其次,我会确保你的指纹图像确实存在于你的
公共/资产
文件夹中

预编译过程通常会创建一系列必须在资产中引用的
图像
样式表
js
文件。这是由我上面提到的助手处理的,但这也意味着它们可能被错误引用

--


如果您的文件夹中有正确的文件,那么问题将是您如何引用它们,否则这将是预编译过程本身的问题(在
application.css
的职权范围内)

请确保nginx为您的资产提供服务。然而,你具体问了什么,你遇到了什么问题?我网站上的图片没有加载。特别是我在css中列出的那些。所以,我想弄明白为什么他们不会出现。例如,我可以查看它们,但它们不会出现在我的网页上。我以前见过这个链接。我已经设置了nginx.conf和我的production.rb,所以我不确定我还需要做什么。我认为问题在于你的css。使用Chrome中的开发者工具,可以清楚地加载图像。但是css中有一些错误,使它们无法被看到。可能是一个高度为0的div或其他什么。#intro{background:#111 url(“”)无重复中心;overflow:hidden;}header{height:54px;width:100%;z-index:99999;background:url(“”);position:fixed;top:0;left:0;}如何从javascript调用asset#url或asset-url方法?对于rails 6,我在回答中使用了
asseturl
而不是
asseturl
(注意
-
而不是
)。这篇博文帮助我修复了这个错误
#app/assets/stylesheets/application.css.scss #-> notice the extension
background: asset_url("k-opacity-70.png");