2009-07-17 11 views
1

Bei der Verwendung von Capistrano für die Bereitstellung bei jeder Bereitstellung finde ich, dass Rails die gesamten CSS-Asset-Caches JS & regeneriert. Dies ist unabhängig davon, ob die Datei aktualisiert wird oder nicht.Rails Asset Caching

Gibt es eine Möglichkeit, Rails dazu zu bringen, dies nur dann zu tun, wenn eine oder mehrere der Dateien aktualisiert wurden?

Ich habe : normalize_asset_timestamps in Capistrano ausgeschaltet, so dass sollte kein Problem sein.


Mein Hauptproblem ist, dass rechts von der Fledermaus es eine erhebliche Menge an Speicher verwendet diese Aktion auszuführen, und es scheinbar freigibt nie Speicher.

Vielen Dank im Voraus.

Antwort

2

Wenn die Dateien nicht vorhanden sind, erstellt Rails sie. Sie könnten die alten zwischengespeicherten Assets in das neue Verzeichnis scannen, bevor Sie Ihren Rails-Code starten, aber ich glaube nicht, dass capistrano schlau ist, welche Dateien sich geändert haben, so dass Sie nicht wissen, wann Sie das tun.

Wenn Sie genau das wollen, was Sie beschreiben, würde ich vielleicht md5sum die alten und neuen js/css-Verzeichnisse und suchen Sie nach einem Unterschied. Wenn es einen gibt, müssen Sie von Grund auf neu erstellen, wenn es keinen gibt, können Sie die alten Dateien über scp.

Alternativ, wenn alles, was Sie kümmern sich um den Speicher ist, können Sie die Assets vor dem Starten der Server erstellen. Etwas wie:

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 

Und in der Kappe, bevor Sie beginnen Rails Daemons script/runner -e production AssetCache.new.pre_cache ausführen, um die Dateien zu füllen. Verwenden Sie in Ihren Layouts einfach AssetCache::APPLICATION_JAVASCRIPTS anstelle Ihrer Inline-Liste von Dateien. Spülen, wiederholen und für Stylesheets waschen. Die Rails-Daemons werden die vorhandenen Caches sehen und nicht Ihr Gedächtnis verlieren.

Wenn Sie auf mehreren Servern arbeiten, müssen Sie die Assets wahrscheinlich replizieren, ohne ihre Zeitstempel zu ändern.

Viel Glück!