2012-04-18 29 views
5

我在生產:缺少的東西,編譯成錯誤文件(JavaScript的「/ admin」被編譯成前端代碼等等)時遇到資產問題。大部分資產來自引擎。我想調試和優化這個。使資產管道像發展中的生產一樣

對於這一點,我需要預編譯,發球和失敗對我開發環境就像它是在生產完成。

我增加了一些行我config/development.rb

config.serve_static_assets = true 
    config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css) # @TODO: clean up, and optimize. 
    config.assets.compile = false 

運行這個與rake RAILS_GROUPS=assets RAILS_ENV=development assets:precompile給了我所有的資產和public/manifest.yml

但隨後的服務器出現故障:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Spree/home#index 

Showing /xxxx/app/views/spree/shared/_head.html.erb where line #13 raised: 

favicon.ico isn't precompiled 

的favicon.ico不預編譯。但它是!它在那裏,在公共目錄中,manifest.yml,我可以通過瀏覽器(或wget)獲取它:http://localhost:3000/assets/favicon.ico

備註 Favicon僅僅是第一個被稱爲的資產。如果我刪除了favicon,問題僅僅表現爲下一個資源,即「all.js」,或者當刪除時,「all.css」等等。我可以剝離它直到「footer_bg.png」,然後它會在那裏失敗。再說一遍:問題並不在於圖標,但事實上開發環境根本沒有看到預編譯的資產。

還需要什麼才能獲得開發資產流水線類似於生產

編輯:更明確的解釋,favicon不是問題,只是一個症狀。

+0

什麼是您的生產環境堆棧?單服務器/多服務器,Apache/Nginx,Heroku?您是否正在使用capistrano並使用capistrano配方進行部署?你在生產中使用config.serve_static_assets = true嗎?您是否嘗試過通過apache/nginx處理serve_static_assets而不是Rails推薦的Rails? – John 2012-05-17 04:01:40

+0

我的生產堆棧幾乎是一個黑盒子乘客。這是一個site5虛擬主機。我沒有使用capistrano進行部署,而是使用git-push && post-commit hook(又名git-deploy)。 'config.serve_static_assets = true'被禁用。是的,我嘗試過服務於Apache的資產。它解決了一點。由於我在這裏嘗試解決的問題是我的**開發**環境不能像生產一樣提供我的資產。 – berkes 2012-05-17 09:26:33

回答

2

我結束了在安裝一個apache,乘客在本地主機上進行故障排除。

由於靜態資產服務,Apache(可能可能是任何乘客服務器)。 此外,在本地主機上,我可以在其日誌非常高的情況下將apache的冗長性提升,爲我提供足夠的調試信息。

乘客仿效紅寶石版本和寶石裝載儘可能多的生產。在webrick上運行太不相同了,即使在儘可能接近的情況下模擬時,它也證明與生產棧有太大的不同,這就是爲什麼我不能在那裏重現生產問題的原因,

將整個堆棧燒起來,就好像它是生產一樣,這使我能夠排除故障。這導致我得出結論:有幾個問題導致了資產危機:寶石資產沒有被收回;權限問題(編譯的資產不能被www數據讀取)和一些資產沒有被正確編譯。

0

我想你可能要離開publicfavicon.ico ...

alzabo0:~ $ rails --version 
Rails 3.2.3 
alzabo0:~ $ rails new ojoijoijo 
[...] 
     create public/404.html 
     create public/422.html 
     create public/500.html 
     create public/favicon.ico 
     create public/index.html 
     create public/robots.txt 
[...] 
+0

也許吧。但那不是重點。問題不是favicon.ico,問題是我的開發環境。將不會識別編譯的資產,就像我想要的那樣。而且由於我選擇通過資產管道(長篇故事)運行圖標,它是第一個包含的文件,僅僅是資產管道扼流圈的示例。如果我按照您的建議將圖標移出流水線,資產流水線會在一些css或js文件中進一步縮小几行。 – berkes 2012-04-18 15:10:35

0

只是一個猜測,但嘗試添加到您的預編譯列表:

config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css favicon.ico) 
+0

確實有效。奇怪的是,這是不需要的。而且由於這條線是我想要清理,修復和優化的主要事情之一,這正是應該「就像生產」一樣的部分。 – berkes 2012-04-19 07:38:53

+0

確實很奇怪。也許是在生產上,如果你「耙資產:乾淨」它突然不會在那裏工作?你如何在你的視圖模板中引用favicon.ico?就我個人而言,我不使用助手來生成favicon.ico鏈接。你正在使用favicon_link_tag?這是一個古怪的東西,現在可能將它留在開發中,然後轉移到有趣的位置上? – pduey 2012-04-19 12:00:29

+0

請注意,favicon *不是問題*。問題在於,我的開發環境在預編譯時不會識別資產。 Favicon *僅僅是一個例子*。當我離開圖標時,問題仍然存在,並且會顯示下一個資源:js或css文件。 – berkes 2012-04-19 15:33:04