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