2011-09-14 63 views
1

如何在啓用資產管道的情況下在rails 3.1的維護頁上訪問資產?rails 3.1維護頁面資產

與資產管道enalbed所有資產都在其文件名的哈希值。但是,維護頁面是vanilla HTML,並且rails/passenger被apache配置繞過,因此無法生成正確的資產路徑。

我需要application.css和圖像文件。如果他們是舊的,那很好。

我能想到一些組裝機,但他們都是跛腳:

  • 在每一個部署,符號鏈接,我需要,我在維護文件使用一個通用名稱的資產。
  • 使我的維護頁面變爲動態,生成它並在某處轉儲標記 - 然後修改我的維護「部署」腳本。

回答

1

如果您希望避免符號鏈接或動態(erb)頁面,請使用靜態模板並在部署過程中對其進行修改。

  1. 首先創建一個維護頁面模板。

  2. 在部署過程中讀取預編譯過程中創建的文件mainfest.yml。

  3. 閱讀在MAINT頁面的模板。

  4. 用從清單中的散列版本的模板命名的任何文件。

  5. 寫出改變模板文件系統。

1

對於任何人的方便,我在我的項目採用了理查德的解決方案,並創建了一個簡單的Ruby腳本,取代在靜態HTML錯誤/維護頁面鏈接資產。這是非常狡猾的,不是一個耙子任務,所以它儘可能快。無論如何它沒有Rails depenency,除了它必須從rails根目錄運行。

#!/usr/bin/env ruby 

require 'yaml' 

GLOBS = %w(public/errors_source/*.html) 
MANIFEST = "public/assets/manifest.yml" 

manifest = YAML::load(File.open(MANIFEST)) 

GLOBS.each do |glob| 
    Dir.glob(glob).each do |file| 
    next unless File.file?(file) 
    contents = File.read(file) 

    manifest.each do |asset, compiled_asset| 
     contents.gsub!(asset, "/assets/#{compiled_asset}") 
    end 

    File.open(file.gsub('errors_source/',''), 'w') do |outfile| 
     outfile.write(contents) 
    end 
    end 
end 

腳本預計靜態HTML錯誤/維護網頁住errors_source目錄,並將它們複製(替換爲他們的哈希版本的資產)的軌道根目錄下。

然後樣品維護頁面可能看起來像這樣(請注意CSS資產鏈接和標識圖像 - 這些資產只需與主樑的代碼共享):

<html> 
<head> 
    ... 
    <link href="application.css" media="screen" rel="stylesheet" type="text/css"/> 
</head> 

<body> 
    ... 
    <a href="/"><img src="logo.png" width="161" height="61"/></a> 
    ... 
</body> 
</html> 
1

如果您在Heroku上,有一個附加組件叫做Trackman。 您可以鏈接所有資產,並在S3上部署您的頁面和資產。 你實際上沒有什麼可以編碼的。 您可以使用gem中的實用程序也使dev成爲一塊蛋糕。

http://www.trackman-addon.com