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 这样做。
我是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 这样做。