Rails资产缓存

时间:2009-07-17 16:54:52

标签: ruby-on-rails ruby-on-rails-plugins

每次部署时都使用Capistrano进行部署,我发现Rails会重新生成整个JS& CSS资产缓存。这与文件是否更新无关。

有没有办法让Rails只在一个或多个文件更新后才能这样做?

我已经关闭了Capistrano中的:normalize_asset_timestamps ,所以这不应该是个问题。


我的主要问题是,它立即使用大量内存来执行此操作,它似乎永远不会释放内存。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果文件不存在,Rails将创建它们。您可以在启动Rails代码之前将旧的缓存资产scp到新目录中,但是我不相信capistrano对哪些文件已更改很聪明,因此您不知道何时执行此操作。

如果你想要你所描述的,我可能会md5sum旧的和新的js / css目录并寻找差异。如果有一个,你需要从头开始构建,如果没有,你可以scp旧文件。

或者,如果您关心的只是内存,则可以在启动服务器之前构建资产。类似的东西:

class AssetCache
  include ActionView::Helpers::TagHelper
  include ActionView::Helpers::AssetTagHelper

  APPLICATION_JAVASCRIPTS = %w{ mootools mycustom admin }

  def pre_cache
    javascript_include_tag JAVASCRIPT_ASSETS,
                           :cache => 'cache/app.js'
  end
end

在启动之前,在启动Rails守护程序运行script/runner -e production AssetCache.new.pre_cache以填充文件。在您的布局中,只需使用AssetCache::APPLICATION_JAVASCRIPTS而不是内联文件列表。冲洗,重复和清洗样式表。 Rails守护进程将看到现有的缓存,而不是占用你的记忆。

如果你在多台服务器上,你可能需要在不改变时间戳的情况下复制资产。

祝你好运!