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

Rails App: pipeline asset not working as expected

我是ruby和rails新手,所以请耐心等待我。

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

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

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

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

当我在开发环境中查看加载页面(google chrome中的Ctrl+U)的源代码时,我看到了这个

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

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

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

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

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


既然你没有提到它,我猜你没有将 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 )

为什么这是必要的?来自指南:

The default matcher for compiling files includes application.js, application.css and all non-JS/CSS files (this will include all image assets automatically) from app/assets folders including your gems:

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

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