当前位置: 首页 > 知识库问答 >
问题:

如何使用Gulp rev all Manifest.json修补Rails?

令狐增
2023-03-14

我用的是Rails 4.2 Ruby 2.2

我生成了一个新的应用程序使用:rails的新应用程序-Skip-链轮

我所有的Gulp任务都成功运行(其中很多任务:从Gulp changed和Gulp livereload到Gulp minify css、Gulp uncss和其他)。

使用gulp rev all,我能够生成具有MD5指纹命名约定的所有资产。

它们被正确保存到rev-manifest.json

app/assets/rev-manifest.json:

{
  "rev-manifest.json": "rev-manifest.9680cee8.json",
  "images/measurement.png": "images/measurement.cedb4145.png",
  "images/measurement2.png": "images/measurement2.cedb4145.png",
  "scripts/chachin.js": "scripts/chachin.5f30b461.js",
  "stylesheets/chachin.scss": "stylesheets/chachin.4c7c499d.scss"
}

app/helpers/application_helper.rb

module ApplicationHelper

  def stylesheet_link_tag(url, options={})
    url = AssetManifest.stylesheet_path(url)

    super(url, options)
  end

  def crossorigin_javascript_include_tag(url, options={})
    url = AssetManifest.javascript_path(url)

    super(url, options)
  end

  def image_tag(url, options={})
    url = AssetManifest.asset_path(url)

    super(url, options)
  end

  def image_path(url, options={})
    url = AssetManifest.asset_path(url)

    super(url, options)
  end

  def image_url(url, options={})
    url = AssetManifest.asset_path(url)

    super((ActionController::Base.asset_host || "") + url, options)
  end

end

config/initializers/asset_manifest.rb

class AssetManifest

  def self.manifest
    if File.exists?("app/assets/rev-manifest.json")
      @manifest ||= JSON.parse(File.read("app/assets/rev-manifest.json"))
    end
  end

  def self.stylesheet_path(url)
    if AssetManifest.manifest
      url += ".css" unless url.end_with?(".css")
      AssetManifest.manifest[url] || url
    else
      url
    end
  end

  def self.javascript_path(url)
    if AssetManifest.manifest
      url += ".js" unless url.end_with?(".js")
      AssetManifest.manifest[url] || url
    else
      url
    end
  end

  def self.asset_path(url)
    if AssetManifest.manifest
      AssetManifest.manifest[url] || url
    else
      url
    end
  end
end

我错过什么了吗?

共有1个答案

庞修贤
2023-03-14

Rails.root合并到资产清单文件的路径中可能是个好主意。

以下是我所做的:

config/initializers/asset_manifest.rb

class AssetManifest

  MANIFEST_FILE = "rev-manifest.json"

  class << self

    def manifest
      @manifest ||= read_manifest(manifest_file_path)
    end

    def stylesheet_path(url)
      url += ".css" unless url.end_with?(".css")
      AssetManifest.manifest[url] || url
    end

    def javascript_path(url)
      url += ".js" unless url.end_with?(".js")
      AssetManifest.manifest[url] || url
    end

    def asset_path(url)
      AssetManifest.manifest[url] || url
    end

    private

    def manifest_file_path
      File.join(Rails.root, "app", "assets", MANIFEST_FILE)
    end

    def read_manifest(path)
      if File.exists?(path)
        JSON.parse(File.read(manifest_file_path))
      else
        {}
      end
    end

  end
end

帽子提示https://bugsnag.com/blog/replacing-the-rails-asset-pipeline-with-gulp关于如何使用大口而不是链轮作为资产管道的伟大介绍。

 类似资料:
  • 问题内容: 我遇到了有关monkey修补Django的帖子: 我知道这不是理想的选择,最好User通过单独的模型添加字段和函数Profile。 话虽如此,我只想了解这是如何工作的: 我将把monkey补丁代码放在哪里? 代码何时运行-仅运行一次?每个Python解释器启动一次?每个请求一次? 大概我仍然需要更改数据库架构。因此,如果我放下桌子运行,会syncdb“知道”是否已添加新字段吗?如果没有

  • 问题内容: 我遇到了有关猴子修补Django的帖子: 我知道这不是理想的选择,最好通过单独的模型添加字段和函数。 话虽如此,我只想了解这将如何工作: 我将把monkey补丁代码放在哪里? 代码何时运行-仅运行一次?每个Python解释器启动一次?每个请求一次? 大概我仍然需要更改数据库架构。因此,如果我放下桌子运行,会“知道”是否已添加新字段吗?如果没有,如何更改架构? 问题答案: 您可以将其放置

  • 问题内容: 我有一个包含许多字段的模型“ MyModel”,我想使用PATCH方法更新字段“状态”。我正在使用基于类的视图。有什么方法可以实施PATCH? 问题答案: 序列化程序通过指定何时初始化序列化程序来允许部分更新。这是默认情况下在通用视图中处理请求的方式。 这样,您就可以更新序列化程序中的各个字段,或者如果需要的话可以更新所有字段,而无需标准请求的任何限制。

  • 我正在使用Visual Studio Code进行编码,但最近我遇到了奇怪的问题,该如何解决? 当我输入php artisan tinker时,tinker文本不像往常一样,我记得颜色是蓝色的,但现在是白色的。同样在使用php artisan migrate和etc命令后,结果文本是白色的 我卸载了Vscode以及所有appdata和扩展以及与之相关的任何东西,但在安装最新版本后没有任何变化,修补

  • 这是我在Google App Engine上的twitter讨论的后续帖子(twitter对话) 问题是Jersey和GAE不能与DataNuceleus2.0一起工作,因为GAE需要ASM4.0,而Jersey需要3.1。这里有一个详细的描述和简单的解决方案:GAE和Jersey问题描述 问候, 马里奥

  • 问题内容: 我在用另一个功能替换另一个模块中的功能时遇到麻烦,这让我发疯。 假设我有一个看起来像这样的模块bar.py: 我还有另一个看起来像这样的模块: 我希望得到结果: 但是我得到了这个: 我究竟做错了什么? 问题答案: 考虑一下Python名称空间的工作原理可能会有所帮助:它们实际上是字典。因此,当您执行此操作时: 这样想: 希望您能明白为什么它不起作用:-)将名称导入名称空间后, 从中 导