2016-01-21 55 views
0

在服務器上預編譯資源需要很長時間,其中Rails 4.0.0應用程序有時會被終止,因此我切換到本地執行此操作,將其壓縮並上傳到服務器代替。Rails資產管道爲舊清單提供服務

它解決了速度問題。但是我遇到了另一個問題,即已經被上傳到服務器的最新資產沒有被我的Rails服務器服務,即使它們已經被重複重新啓動。

爲了說明這一點,application.css的版本,我們現在正在擔任我們的生產程序是application-dc02e058cd956b2492c840315ccbff7f.css

服務器上的清單可用文件 -

[email protected]:/mnt/snapshot-production/current/public/assets$ ls -lt manifest-* 
-rw-rw-r-- 1 app app 203032 Jan 17 05:32 manifest-3365253428e645b923e834b54fb530ea.json 
-rw-rw-r-- 1 app app 203032 Jan 6 17:02 manifest-44c2495f77ae0b10489563653d482136.json 
-rw-rw-r-- 1 app app 203032 Dec 30 08:53 manifest-bbe38eefd3a3671b8d1d7bf524307413.json 
-rw-rw-r-- 1 app app 203212 Dec 30 08:36 manifest-7fde3fe5c6247d724bf36a7aa9baee53.json 

如果我試圖找到這體現參考目前服務的應用程序。我得到以下內容 -

[email protected]:/mnt/snapshot-production/current/public/assets$ grep -rl application-dc02e058cd956b2492c840315ccbff7f.css manifest-*.json             
manifest-44c2495f77ae0b10489563653d482136.json 
manifest-7fde3fe5c6247d724bf36a7aa9baee53.json 
manifest-bbe38eefd3a3671b8d1d7bf524307413.json 

正如你所看到的,它被服務從我擁有的3個較早版本的清單文件中。

如果我試圖找到正在從我最新的清單文件中擔任什麼版本的application.css(1月17日) - manifest-3365253428e645b923e834b54fb530ea.json -

[email protected]:/mnt/snapshot-production/current/public/assets$ grep -Po application*.css manifest-3365253428e645b923e834b54fb530ea.json 
manifest-3365253428e645b923e834b54fb530ea.json:application-58eb91ccbe7698274d351e16b9b281aa.css 
manifest-3365253428e645b923e834b54fb530ea.json:application-58eb91ccbe7698274d351e16b9b281aa.css 

正如你可以看到它是一個完全不同的一個,這是我所期望我的應用服務器現在就可以投入使用但不幸的是,這種情況很多時候並沒有引起問題。

但有一件事我已經注意到,但沒有說明的是,有時它工作正常。最新版本是在部署完成後提供的。

有什麼問題嗎?

回答

0

你應該從未在你的資產目錄中有多個清單文件。那是你的問題。

的Rails(實際上鍊輪)撿起來發現的第一個清單文件(source)。它可能是新的,它可能是舊的;沒有保證。清單使用completely random文件名。如果只有一個清單文件,則可以使用唯一保證正確清單的方法。

開始通過下載,你的服務器使用的清單,最重要的是運行assets:precompile更新它,然後再重新上傳。否則,每次預編譯時都會創建一個新的清單,導致出現這些問題。

+0

啊!我懂了。謝謝馬特。並感謝關於下載資產的提示。好主意啊。從來沒有想到這一點。謝謝。 –