2012-11-01 160 views
0

因此,我開始調查Rails3中的資產管道,並且我有一個理想的用例,它有點偏離了路徑......所以我正在尋找一個配方。Rails3:如何使用資產管道來構建靜態資產

  • 我經常遇到的WEBrick本地發展,然後運行 客運+阿帕奇應用程序的部署實例。

  • 該應用配置有suburi路徑,例如, http:// server/approot/...

  • 使Webrick路徑像部署實例一樣工作,我將map '/approot' do run app添加到config.ru。現在的WEBrick也是在http://本地:3000 /爲approot/...

的混亂

鑑於此設置中,我試圖用rake assets:precompile,並已具有之間有很多的配置問題當地部署 - 丟失的文件,不正確的路徑,在Firebug 404等。下面是我試過的解決方案略知一二:

  • config.assets.initialize_on_precompile = falseapplication.rb防止嘗試初始化應用爲production,(我們有幾個已部署的環境,並在預編譯資產時稱它們爲不同的名稱,例如。

  • config.assets.precompile += %w(*.js *.css)application.rb包含諸如jquery.js和ujs和rails.js之類的東西,這些東西都沒有。

  • config.assets.prefix = "/approot/assets"糾正了一個問題,在地圖上方(config.ru)並不適用於資產,那麼資產必須預編譯爲./public/approot/assets,但我不知道這隻能在本地,也就是說,如果我部署,我的資產路徑是http:// server/approot/approot/(js|css|...)

當預編譯的資產,耙任務切換針對Env production,但隨後從Rails3中DOC不清楚鏈輪是否繼續本地編譯的飛行,並利用這些動態資產,或是否將服務於靜預編譯資產呢?

  • 我試圖把config.serve_static_assets = trueenvironments/development.rb,但我不知道這是如何工作與config.assets.compress = falseconfig.assets.debug = true。雖然我看到一篇帖子說「解決了問題」(原文如此),但將assets.debug設置爲false似乎隱藏了GET請求的webrick日誌。

質量要求的食譜

所以我想一個食譜,執行以下操作:

  • 資產堅持正確的路徑擔任http://server/approot/assets/...無論是在客運運行或webrick(即部署或本地)。如果這是不可能的,那麼我可以切換我的本地開發環境以使用Passenger + Apache,這不是什麼大不了的事情,但我只想知道它是否可能。

  • 原資產/app/assets存在像正常Rails3中,但是當我預編譯它們,他們的工作完全一樣的方式部署ENVS使資源文件的引用不破(即現在,有很多的裁判找/assets/image/...當路徑明確設置爲/approot/assets/image...

  • 鏈輪不能(是否有有關部署根VS一個suburi,如http:// server/assets/...http:// server/approot/assets/...假設它是從Rails3中DOC不清)在部署環境中使用(我們的限制,對不起)。這意味着鐵路s3應用程序必須看起來像一個靜態資產應用程序。我知道這是預編譯資產應該做的事情,但路徑問題正在阻止我像廣告中那樣工作。


TL; DR - 我覺得我嘗試了很多不同的東西,如果我只知道他們的正確組合可能的工作。

參考

+1

如果您使用Sprockets提前編譯資源,則需要Sprockets稍後再讀取清單;它全部流過[Sprockets :: Helpers :: RailsHelper](https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/helpers/rails_helper.rb)。如果你不能在生產中使用Sprockets(「我們的限制,對不起」),你也應該在開發過程中使用它。 – willglynn

+0

是的,我得到的印象越多,我對它的閱讀和它們如何融合在一起。謝謝!我們在設置應用程序方面缺乏靈活性 - 另一個團隊在部署的envs中管理Apache和Passenger,但在rails應用程序中使用鏈輪可能沒有問題。 –

回答

0

好吧,這裏是一個潛在的可怕的答案,但似乎有兩種情況下與使用WEBrick工作現在是萬聖節之後的日子(儘管我還沒有在部署的插槽中嘗試過這種方法)。

配置

除非另有說明,一切都是從rails new app一代默認值。

的config/application.rb中

config.assets.initialize_on_precompile = false 

環境/ production.rb(不是真正的生產,僅用於耙資產:預編譯)

config.assets.css_compressor = :yui 
config.assets.js_compressor = :uglifier 

環境/ stage.rb(這是我們部署的一個envs)

config.serve_static_assets = true 

config.ru

這是可怕部分。我複製了地圖,以便Rack可以同時服務suburi和root。因此,控制器動作,顯示佈局可以有http:// server/approot/foo/index,而佈局中的資產可以從http:// server/assets/...

map '/approot' do 
    run AppRoot::Application 
end 

map '/' do 
    run AppRoot::Application 
end 

運行在本地

$ rake assets:precompile 
$ rails s 

和螢火我看到服務的獨立部分被加載鏈輪(所有200 OK):

  • GET /爲approot/
  • GET /assets/application.css?b ODY = 1
  • GET /assets/jquery.js?body=1
  • GET /assets/jquery.ujs.js?body=1
  • GET /assets/application.js?body=1

好吧,現在在本地測試一個'已部署'插槽,看看編譯過的資產是否工作?

$軌小號-e階段

,然後我看到正確的預編譯的資產(全部200 OK):

  • GET /爲approot/
  • GET /assets/application-xxxxxxxxxxxxxxx.css
  • GET /assets/application-xxxxxxxxxxxxxxx.js

好了,這是不是像你一樣真實suburi SOLU重刑,我想我會在部署插槽有問題。第2輪,戰鬥!