2011-09-14 65 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