在 rails 3 環境中是用 生產環境 nginx + passenger 出現 css 檔案無法編譯的錯誤

來源:互聯網
上載者:User

在 通過capistrano 進行發布程式到 nginx+passenger 生產環境後。

如果訪問網站,出現錯誤。查詢 production.log檔案會發現 ActionView::Template::Error (congest_index/congest_index_of_net_for_date.css isn't precompiled): 

說明 css 等檔案沒有先行編譯。

這是由於 在生產環境,出於效率的考慮把預先編譯給關閉了

要解決這個問題。有2種方法

  1. 開啟先行編譯開關(由於效率原因不推薦)
    在config/environments/production.rb 檔案裡面 加入
    config.assets.compile = true

    並且把原來的 config.assets.compile = false 給屏蔽。

    然後發布到svn 上,再通過capistranto 進行部署。

  2. 發布的時候進行編譯。

    如果在production上用pre compile的話,不是所有的css和js都會被先行編譯,拿css來說,他是根據application.css中的引用來判斷,如果你的css沒有被包含在application.css或者其中引用的css中,那麼這個資源就會不被先行編譯,production上就會出錯。

    你需要在production.rb中指定需要先行編譯的資源,如下:

    config.assets.precompile += %w( login.css controllers/*.js controllers/*.css lib/*.js lib/*.css common/*.js )

    然後 commit 到 svn 上,再通過capistranto 進行部署。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.