本月,我從Rails 3.0升級到Rails 3.1 - 本週我試圖在生產模式下啓動服務器 - 今天我碰壁了!無法在本地生產軌上通過流水線配置資產3.1.3服務器
我不能讓我的生產環境中的服務器通過資產管道服務於我的公共資產(JavaScript和CSS),除非我在environment.rb文件中設置config.assets.compile = true
,這對於速度的原因我明明穿上」不想做。
我有大量的JS和CSS文件,每個文件都傾向於在一個或兩個不同的頁面上使用。這意味着創建單個「清單」文件不適合我的用法,因爲每個頁面都需要稍微不同的內容。我也希望一些CSS不會很好地坐在一起。因此,我放下了「簡單工作」的方法,希望稍後整理大量的CSS/JS。
這裏是production.rb文件:
Implicit::Application.configure do
...
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# I set this to true, as I am testing this locally, just running a local Thin server
config.serve_static_assets = true
config.assets.compress = true
# Setting this to false removes the issue - but is SLOW
config.assets.compile = true
config.assets.digest = true
# This is overkill - but does get EVERYTHING precompiled for now
config.assets.precompile += %w(*.css *.js)
config.action_dispatch.x_sendfile_header = nil
...
end
這對我來說相當新的領域,所以我花了很多當今切換這些布爾和停止/啓動局部瘦/ Rails的服務器去嘗試一下。但唯一值得注意的是編譯標誌。
我的application.rb文件是非常標準的,它有config.assets.enabled = true
和config.assets.initialize_on_precompile = false
在裏面,後者從一個heroku文章(和猜測,再次)。
我有一個完全填充public/assets
目錄,與bundle exec rake assets:precompile
命令,大約需要20分鐘到我的老氣的筆記本電腦(5年)運行,可能是與創建與「一網打盡」預編譯正則表達式,雖然行註釋,它仍然需要超過10分鐘
隨着編譯標誌設置爲true
,我能看到這些資產的副本我/tmp/cache
目錄中得到創建(!) - 這顯然是應用程序創建它自己的「編抄」的資產。
將編譯標誌設置爲false
,我遇到了jquery.reveal isn't precompiled
的錯誤消息(在日誌中,除非我設置請求爲本地,然後我在錯誤頁上看到它)。但是,當我去http://localhost:3000/assets/jquery.reveal.js
JavaScript文件被提供。
我的應用程序佈局造成這個的線路是:
<%= javascript_include_tag "application", "jquery.reveal" %>
我曾試圖改變這種jquery.reveal到jquery.reveal.js
沒有變化。刪除它修復了索引頁面,除了jquery.reveal功能已經消失了!很顯然,application.js正在被正確地提供。我只是不明白爲什麼jquery.reveal不是,因爲我可以在public/assets目錄中看到預編譯的文件。
請仔細檢查管道指南最後一部分的所有配置選項,如果沒有顯示任何問題,請發佈index.html.erb的內容以及應用程序中的任何Rails幫助器調用.RB? – 2012-01-18 08:14:07
最初發布的錯誤消息來自使用過期的「生產」數據庫,並且來自我的安全代碼。已更新最後兩段顯示新的錯誤 - 我回來讓jquery.reveal沒有被發現! – Phantomwhale 2012-01-19 03:11:08