每次部署时都使用Capistrano进行部署,我发现Rails会重新生成整个JS& CSS资产缓存。这与文件是否更新无关。
有没有办法让Rails只在一个或多个文件更新后才能这样做?
我已经关闭了Capistrano中的:normalize_asset_timestamps ,所以这不应该是个问题。
我的主要问题是,它立即使用大量内存来执行此操作,它似乎永远不会释放内存。
提前致谢。
答案 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守护进程将看到现有的缓存,而不是占用你的记忆。
如果你在多台服务器上,你可能需要在不改变时间戳的情况下复制资产。
祝你好运!