1

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

只有当一个或多个文件被更新时,有没有办法让 Rails 这样做?

我在 Capistrano 中关闭了:normalize_asset_timestamps,所以这应该不是问题。


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

提前致谢。

4

1 回答 1

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 守护进程将看到现有的缓存,而不是占用你的内存。

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

祝你好运!

于 2009-07-22T12:53:04.817 回答