Rails应用程序:管道资产未按预期工作

时间:2015-05-12 21:02:46

标签: css ruby-on-rails ruby-on-rails-4 sass asset-pipeline

我是红宝石和铁路新手所以请耐心等待我。

我在rails中有一个SASS文件(stats.css.scss),它在我的开发环境中正确加载,但是没有加载到我的生产环境中。我知道是造成这种情况的资产管道,但已经做了几次尝试,无法弄清楚出了什么问题。这就是我得到的:

在我的网站/ app / assets / stylesheet文件夹中,我有stats.css.scss文件

index.html.erb文件正在加载SASS文件,如下所示:

<%= stylesheet_link_tag "stats", media: "all" %>

当我在开发环境中检查加载页面的源代码(谷歌浏览器中的Ctrl + U)时,我看到了这个

<link href="/assets/stats.css?body=1" media="all" rel="stylesheet" />

这是我的预期,因为它看起来像资产管道中包含的JS。但是在生产环境中,源代码显示了这个

<link href="/stylesheets/stats.css" media="all" rel="stylesheet" />

任何人都可以帮我弄清楚我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

建议:不要在生产中编译资产。它没有必要,容易出问题。

由于您还没有提到它,我猜你不会在预编译配置中添加stats.css。将以下内容添加到config/application.rb

config.assets.precompile += %w( stats.css )

Rails Guide现在建议在config/initializers/assets.rb

中这样做
Rails.application.config.assets.precompile += %w( stats.css )

为什么这有必要?从指南:

  

用于编译文件的默认匹配器包括application.js,application.css和所有非JS / CSS文件(这将自动包括所有图像资源)来自app / assets文件夹,包括你的宝石:

[ Proc.new { |filename, path| path =~ /app\/assets/ && !%w(.js .css).include?(File.extname(filename)) }, /application.(css|js)$/ ]

换句话说,如果您希望在任何时候对stats.css.scss进行预编译,则需要明确告诉Sprockets这样做。