Rails图像资产未加载

时间:2014-05-18 21:18:02

标签: css ruby-on-rails nginx asset-pipeline digital-ocean

我一直在处理生产中铁轨资产管道的复杂问题,现在已经有一周了。我终于差不多完成了。我有两个我在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

除了确保预编译资产之外,我还需要做些什么吗? 我的应用程序正被部署到拥有nginx和乘客的数字海洋服务器。

1 个答案:

答案 0 :(得分:1)

我认为你的问题在这里:

background: url("<%= asset_path 'k-opacity-70.png' %>"); position: fixed; top: 0; left: 0; }

<强>辅助

有一个名为asset_url的助手,强烈推荐用于CSS。我会这样做:

#app/assets/stylesheets/application.css.scss #-> notice the extension
background: asset_url("k-opacity-70.png");

这将确保您的资产被正确引用,尤其是当您将它们发送到服务器时。这可能听起来很简单,但我们之前在Heroku中遇到了问题(我知道你使用DO),因为他们的指纹不正确,文件没有呈现,

可能因此而被投票(因为它与您的代码基本相同),但它对我们有用


<强>指纹

其次,我会确保您的指纹图像实际存在于public/assets文件夹

预补偿过程通常会创建一系列imagesstylesheets&amp;必须在资产中引用的js个文件。这是使用上面引用的助手来处理的,但这也意味着它们可能被错误引用

-

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