2012-03-28 59 views
17

我已經使用bootstrap-sass將引導程序集成到了我的應用程序中。該應用程序工作正常,我的本地機器上,但是當我去通過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

你可以在你的本地機器上運行'rake assets:precompile'嗎? – stephenmurdoch 2012-03-28 21:56:46

+0

是的,但我必須運行它,並指定我在開發環境中,如果這很重要:'RAILS_ENV =開發包exec rake資產:預編譯' – 2012-03-28 22:09:18

+0

您是否更改過'config.assets.precompile'? – nobody 2012-03-29 16:17:38

回答

55

編輯完你的production.rb文件,以便Rails會試圖預編譯所有的CSS/JS文件(48行)。

默認情況下,Rails只會預編譯application.css(.scss)。通過將通配符選擇器添加到config.assets.precompile,您要求Rails在您的應用程序中預編譯每個 css資產,包括Sass偏分集。自然,這可能不是你想要的行爲。

# 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之外所需的其他文件。

+0

這就是我的問題以及你的解決方案解決了它,並給了我一個明確的答案,我在哪裏搞砸了。 – cfeduke 2012-04-09 16:13:10

+1

我沒有'config.assets.precompile + =%w(* .css * .js)'任何地方,並且得到完全相同的錯誤。任何幫助,將不勝感激。 – kakubei 2013-08-29 17:08:06

+1

謝謝。同樣在這裏。在Rails 4.2.1中,要修改的文件現在位於/config/initializers/assets.rb中 – 2015-05-31 22:38:52

1

你需要確保所有的進口你的CSS是按照正確的順序完成的。要使變量起作用,它需要是要加載的前幾個css文件之一。

這篇文章/答案應該幫助Proper SCSS Asset Structure in Rails

1

最初我有類似的問題 Sass :: SyntaxError:未定義的變量:「$ alert-padding」。這條線在assets.rb文件的問題

Rails.application.config.assets.precompile += [/.*\.css/] 

不知道爲什麼,但對我來說,幫助它改變這一行

Rails.application.config.assets.precompile += [/^[-_a-zA-Z0-9]*\..*/] 

它後,問題解決了,一切都在工作生產。