Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.1 rails 3.1维护页面资源_Ruby On Rails 3.1_Asset Pipeline - Fatal编程技术网

Ruby on rails 3.1 rails 3.1维护页面资源

Ruby on rails 3.1 rails 3.1维护页面资源,ruby-on-rails-3.1,asset-pipeline,Ruby On Rails 3.1,Asset Pipeline,在启用资产管道的情况下,如何访问rails 3.1中维护页面上的资产 启用资产管道后,所有资产的文件名中都有一个哈希。然而,维护页面是普通的HTML,apache配置绕过了rails/passenger,因此无法生成正确的资产路径 我需要application.css和一个图像文件。如果是旧的就好了 我能想到一些乱七八糟的东西,但它们都是蹩脚的: 在每次部署时,将我需要的资产符号链接到我在维护文件中使用的通用名称 使我的维护页面动态,生成它,并将标记转储到某个地方-然后修改我的维护“部署”脚本

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

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

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

我能想到一些乱七八糟的东西,但它们都是蹩脚的:

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

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

  • 首先创建一个维护页面模板

  • 在部署期间,读取由预编译进程创建的mainfest.yml文件

  • 阅读维护页面的模板

  • 用清单中的哈希版本替换模板中命名的任何文件

  • 将修改后的模板写入文件系统


  • 为了方便大家,我在项目中采用了Richard的解决方案,并创建了一个简单的ruby脚本来替换静态HTML错误/维护页面中的资产链接。这是一个深思熟虑的任务,不是一个rake任务,所以它是尽可能快的。它没有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\u source
    目录下,并将它们(用哈希版本替换资产)复制到rails根目录

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

    
    ...
    ...
    ...
    
    如果你在Heroku上,有一个叫做Trackman的插件。 您可以链接所有资产,它会在S3上部署页面和资产。 实际上,您没有代码。 您还可以使用gem中的实用程序,使开发成为小菜一碟

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