rails 3.1维护页面资产

时间:2011-09-14 04:48:01

标签: ruby-on-rails-3.1 asset-pipeline

如何在启用资产管道的rails 3.1中的维护页面上访问资产?

对于资产管道,所有资产的文件名都有哈希值。但是,维护页面是vanilla HTML,并且apache配置绕过rails / passenger,因此无法生成正确的资产路径。

我需要我的application.css和图像文件。如果他们是旧的那就好了。

我能想到一些克拉奇,但他们都很蹩脚:

  • 在每次部署时,将我需要的资产符号链接到我在维护文件中使用的通用名称。
  • 使我的维护页面动态化,生成它并将标记转储到某处 - 然后修改我的维护'部署'脚本。

3 个答案:

答案 0 :(得分:1)

如果要避免使用符号链接或动态(erb)页面,请使用静态模板并在部署期间对其进行修改。

  1. 首先创建一个维护页面模板。

  2. 在部署期间,请阅读预编译过程创建的mainfest.yml文件。

  3. 阅读maint页面的模板。

  4. 使用清单中的散列版本替换模板中指定的所有文件。

  5. 将更改后的模板写入文件系统。

答案 1 :(得分:1)

为了方便用户,我在项目中采用了Richard的解决方案,并创建了一个简单的ruby脚本,用于替换静态HTML错误/维护页面中的资产链接。故意不是一个耙子任务,所以它尽可能快。它无论如何都没有Rails依赖性,除了它必须从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目录下,并将它们(将其资源替换为其散列版本)复制到rails根目录。

示例维护页面可能如下所示(注意CSS资产链接和徽标图像 - 这些资产只是与主要的rails代码共享):

<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>

答案 2 :(得分:1)

如果您使用Heroku,则会有一个名为Trackman的附加组件。 您可以链接所有资产,并在S3上部署您的页面和资产。 你几乎没有什么可编码的。 你可以使用gem中的实用程序来使dev成为一块蛋糕。

http://www.trackman-addon.com