rails资产管道有关唯一哈希的问题

时间:2012-03-13 19:22:37

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

1)为什么一个已知没有改变的图像(签证标识)在一台服务器上有3个不同的版本,在另一台服务器上有4个不同的版本。这两个服务器位于不同的环境中:

 ls -la public/a/visa-*
-rw-r--r-- 1 rails rails 1506 2012-03-04 06:33 public/a/visa-2c267b881e96647fbf8297637daf7132.gif
-rw-r--r-- 1 rails rails 1506 2012-01-14 02:33 public/a/visa-603d00ea229b0cb010f2cd1a0a486769.gif
-rw-r--r-- 1 rails rails 1506 2012-03-13 18:34 public/a/visa-fe533b87916500d8ab2ce4a72f45b942.gif

$ ls -la public/a/visa-*
-rw-r--r-- 1 rails rails 1506 2011-12-24 19:35 public/a/visa-4506288212ff5ef40a1af89abd829294.gif
-rw-r--r-- 1 rails rails 1506 2012-03-13 01:19 public/a/visa-4559e644c6dc9eccb35fc06cf3696bef.gif
-rw-r--r-- 1 rails rails 1506 2011-09-18 15:11 public/a/visa-873a9dddb6815e34ddc6049cfb3ec7d8.gif
-rw-r--r-- 1 rails rails 1506 2012-02-26 01:23 public/a/visa-9678ba047d426c775771509f364e8590.gif

......这种模式适用于我拥有的每一项资产。我认为这个想法是让文件名基于该文件的内容。

2)如果文件名基于文件的内容,则rails如何映射<%= image_tag'foo.png'%>到包含哈希的确定路径?

3)如果文件名假设基于文件内容,为什么我每次部署在部署过程中都会预编译'我的资产    - 现在我的应用虚拟机上需要6分钟编译资产。在我的部署期间。部署的其余部分大约需要30秒。    - 为什么推荐的模式不是在部署之前编译资产,将它们检入源代码控制并部署?

1 个答案:

答案 0 :(得分:1)

1)我认为早期版本的Sprockets中有一个错误就是这样 - 你正在使用哪个版本的Rails(和Sprockets)?

2)Rails根据在预编译时生成的manifest.yml文件将资产映射到散列名称。 Sprockets将映射的哈希传递回Rails,将其保存在公共/资产中。当Rails启动时,它会将此文件加载到内存中以便快速访问。

3)您可以在本地编译并提交。唯一需要注意的是,您需要更改development.rb中的资产路径前缀,以避免在开发模式下提供这些静态资产。