2012-03-16 73 views
2

我正在開發一款Rails應用程序,我們希望允許用戶使用管理工具來創建新主題。管理工具是一個單獨的應用程序,並通過數據庫與我們的主應用程序通信。我的問題是我編寫了自定義的Sass擴展來將我們的數據加載到我們的樣式表中,但一旦完成,我無法在生產環境中重新編譯資源。在生產中重新編譯Sass資產

到目前爲止,我已經看到了兩種可能性是:

1.Increment config.assets.version的版本。所以我有這樣的代碼:

MyApp::Application.assets.version = 
     (MyApp::Application.config.assets.version.to_i + .1) 

從我讀過什麼增加一點應引起資產重新編譯,但似乎當用手遞增,重新啓動服務器只工作。

2.創建一個編譯器,並告訴它清理舊資產,並重新編譯:

compiler = Compass::Compiler.new(
        Rails.root.to_s, 
        Compass.configuration.sass_path, 
        Compass.configuration.css_path, 
        {:sass => Compass.sass_engine_options}) 
compiler.clean! 
compiler.run 

使用這種方法,但是,我碰到的問題是,鏈輪:: Index.expire_index!方法在嘗試創建新編譯器時引發錯誤。

是的,我知道我可以設置資產重新編譯每個請求,但性能命中不是我們想要的。另外,由於這是一個主題,數據不應該經常變化,所以我們只需要在管理員選擇保存新主題時重新編譯。

所以,最後,我的問題是:有沒有其他可能的方法來做我想要的?或者我是走向正確的道路,如果是這樣,我會在哪裏出錯?

編輯: 我忘了提及,因爲我們使用Sass函數來更改樣式表的值,即使我打開生產編譯選項,它也不起作用。由於實際樣式表永遠不會改變。

回答

4

Rails有一個Rake任務,可以爲您進行資產編譯。每次將應用程序部署到生產環境時,您都應該運行一次。

rake assets:precompile

編譯後的資產輸出到public/assets。欲瞭解更多詳情,請查看Rails Asset Pipeline Guide