我使用bootstrap-sass将bootstrap集成到我的应用程序中。该应用程序在我的本地计算机上工作正常,但当我通过capistrano部署时,我收到此错误:
Undefined variable: "$baseLineHeight".
(in /var/www/CollegeSportsBlueBook/shared/bundle/ruby/1.9.1/gems/bootstrap-sass-2.0.1/vendor/assets/stylesheets/bootstrap/_accordion.scss)
当capistrano尝试运行assets:precompile
我认为这个变量抛出了错误,因为它是第一个尝试预编译的scss文件中的第一个变量。
有些东西没有加载正确。任何想法可能是什么?
修改
此处完整跟踪https://gist.github.com/2233071
修改2
将application.rb和production.rb添加到gist
答案 0 :(得分:55)
您已编辑了production.rb
文件,以便Rails尝试预编译所有CSS / JS文件(第48行)。
默认情况下,Rails只会预编译application.css(.scss)
。通过将通配符选择器添加到config.assets.precompile
,您要求Rails在您的应用程序中预编译每个 css资产,包括Sass partials。当然,这可能不是你想要的行为。
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w( *.css *.js )
因此,Rails将迭代每个css资产,编译它们。事实上,_accordion.css.scss
是它遇到的第一个Bootstrap资产,Rails将首先尝试编译它。 _accordion
不是独立的,需要在它之前加载一些文件,因此错误。无论如何,它永远不应该被编译为单独的文件。
您需要更改config.assets.precompile
以仅添加application.css/application.js
以外的其他文件。
答案 1 :(得分:1)
您需要确保以正确的顺序导入所有css。要使变量起作用,它必须是要加载的前几个css文件之一。
这篇文章/回答应该有助Proper SCSS Asset Structure in Rails
答案 2 :(得分:1)
最初我遇到了类似的问题
Sass :: SyntaxError:未定义的变量:“$ alert-padding”。问题在assets.rb
文件中使用此行:
Rails.application.config.assets.precompile += [/.*\.css/]
不知道为什么,但对我而言,它有助于将其更改为此行
Rails.application.config.assets.precompile += [/^[-_a-zA-Z0-9]*\..*/]
之后问题解决了,一切都在生产中。