1

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

启用资产管道后,所有资产的文件名中都有一个哈希值。但是,维护页面是普通的 HTML,并且 rails/passenger 被 apache 配置绕过,因此无法生成正确的资产路径。

我需要我的 application.css 和一个图像文件。如果他们是旧的,那很好。

我能想到一些kludges,但它们都很蹩脚:

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

3 回答 3

1

For anyone's convenience, I adopted Richard's solution in my project and created a simple ruby script that replaces asset links in the static HTML error / maintenance pages. It is deliberatery NOT a rake task so that it is as fast as possible. It has no Rails depenency anyway, other than that it has to be run from the rails root directory.

#!/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

The script expects the static HTML error/maintenance pages to live under the errors_source directory and copies them (with assets replaced for their hashed versions) to the rails root directory.

A sample maintenance page then may look like this (notice the CSS asset link and logo image - these assets are simply shared with the main rails code):

<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>
于 2012-10-12T07:46:23.077 回答
1

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

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

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

  3. 阅读主页面的模板。

  4. 将模板中命名的任何文件替换为清单中的散列版本。

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

于 2011-09-25T04:19:59.347 回答
1

如果您在 Heroku 上,则有一个名为 Trackman 的附加组件。您可以链接所有资产,它会在 S3 上部署您的页面和资产。你几乎没有什么可编码的。您可以使用 gem 中的实用程序也使开发变得轻而易举。

http://www.trackman-addon.com

于 2012-10-17T22:24:22.607 回答