2009-12-22 9 views
9

Ich kenne Tools wie Deadweight zum Suchen von CSS, das nicht in Ihrer Rails-App verwendet wird, aber gibt es etwas für Bilder? Ich sitze in einem Projekt mit einem riesigen Verzeichnis von Assets von der Arbeit mit einer Vielzahl von Designern und ich versuche, das Fett in diesem Projekt zu trimmen. Es ist besonders ärgerlich, wenn Assets in unser CDN verschoben werden.Nicht verwendete Bilder in einer Rails App finden?

Irgendwelche Gedanken?

Antwort

13

Es hängt stark von dem Code der Bilder verwenden. Es ist immer möglich, dass ein Dateiname berechnet wird (durch Verketten von zwei Werten oder String-Substitution usw.), so dass ein einfaches Überlappen nach Dateiname nicht unbedingt ausreicht.

Sie könnten versuchen, wget (wahrscheinlich bereits installiert, wenn Sie einen Linux-Rechner haben, sonst http://users.ugent.be/~bpuype/wget/), um Ihre gesamte Website zu spiegeln. Tun Sie dies auf dem gleichen Rechner oder im Netzwerk, wenn Sie können, wird es Ihre gesamte Website kriechen und greifen alle Bilder

# mirror mysite.com accepting only jpg, png and gif files 
wget -A jpg,png,gif --mirror www.mysite.com 

Sobald du das getan hast, wirst du eine zweite Kopie Ihrer Website haben, Hierarchien enthalten alle Bilder, auf die Sie mit jeder Seite, die durch Crawlen Ihrer Site erreichbar ist, aktiv zugreifen können. Sie können dann das Quell-Image-Verzeichnis sichern und durch die Wget-Kopie ersetzen. Überwachen Sie als Nächstes Ihre Protokolldateien auf 404, die sich auf gif/jpg/png-Dateien beziehen. Ich hoffe, das hilft.

+2

wget konnte nicht die gesamte Website, verschiedene Seiten hinter Authentifizierung durchsuchen. Es muss eine Lösung sein, die mit Hilfe von Rails selbst erstellt wurde, da wir seine Helfer verwenden, um die Bilder an erster Stelle anzuzeigen. – mwilliams

+0

Abgesehen davon ist die untenstehende bta-Lösung in Bezug auf die Zeit für den letzten Zugriff in Kombination mit der Verwendung von "wget ​​-mirror" eine gute Lösung, um sicherzustellen, dass Ihre gesamte Website gecrawlt und alle verwendeten Bilder aktualisiert werden. Atime wird jedoch oft deaktiviert, um die Leistung zu steigern. Daher müssen Sie es möglicherweise aktivieren, damit diese Lösung funktioniert. – meagar

11

Das Finden von unsed Bildern sollte einfacher als CSS sein.

Finden Sie einfach * .jpg * .png * gif mit glob, legen Sie diese Dateinamen zu Wörterbuch oder Array und finden Sie diese Dateinamen gegen HTML, CSS, JS-Dateien, entfernen Sie den Dateinamen, wenn Sie gefunden werden und Sie unbenutzte Liste, und verschieben Sie diese Bilder in einen anderen Ordner mit der gleichen Verzeichnisstruktur (Es wird für die Wiederherstellung nur für den Fall gut sein)

Grundsätzlich so, und natürlich für die Dateinamen, die verschlüsselt/verschlüsselt/obskuriert wird nicht funktionieren.

require "fileutils" 

img=Dir.glob("**/*.jpg")+Dir.glob("**/*.png")+Dir.glob("**/*.gif") 
data=Dir.glob("**/*.htm*")+Dir.glob("**/*.css")+Dir.glob("**/*.js") 

puts img.length.to_s+" images found & "+data.length.to_s+" files found to search against" 

content="" 
data.each do |f| 
    content+=File.open(f, 'r').read 
end 

img.each do |m| 
    if not content=~ Regexp.new("\\b"+File.basename(m)+"\\b") 
     FileUtils.mkdir_p "../unused/"+File.dirname(m) 
     FileUtils.mv m,"../unused/"+m 
     puts "Image "+m+" moved to ../unused/"+File.dirname(m)+" folder" 
    end 
end 

PS: Ich habe fileutils, weil normale makedirs und mv nicht Werke sind in meiner Windows-Version von Ruby

Und ich bin nicht gut bei Rubin, so verdoppeln Sie es überprüfen, bevor Sie es benutzen. Hier

ist die Probenergebnisse I in Stammordnern von Proben Schienen liefen Ordner in meinem Fenster

---\ruby>ruby img_coverage.rb 
5 images found & 12 files found to search against 
Image depot/public/images/test.jpg moved to ../unused/depot/public/images folder 
2

Wenn Ihr Dateimanager dies unterstützt, versuchen Sie, Ihr Bilderverzeichnis nach dem Datum des letzten Zugriffs zu sortieren. Dateien, auf die seit längerer Zeit nicht mehr zugegriffen wurde, werden höchstwahrscheinlich nicht mehr verwendet.

Im gleichen Sinne können Sie auch die Logs Ihres Webservers filtern oder in den Logs nachlesen und eine Liste der Image-Dateien erstellen, die in den letzten Monaten angezeigt wurden. Alle Bilder, die nicht in dieser Liste enthalten sind, werden wahrscheinlich nicht verwendet.

+0

Ich denke, das ist die einfachste und plattformunabhängige Lösung. Ein Skript zusammenzustellen, um die Log-Dateien mit dem Asset-Ordner zu vergleichen, ist ein wenig Arbeit, aber durchaus möglich. –

6

Wenn Ihre Bild-URLs kommen oft aus vielen berechneten/verketteten Strings und andere Sachen hart in Ihrem Quellcode programmatisch zu verfolgen und Ihre Anwendung ist in den harten Einsatz, könnten Sie eine weiche „Honeypot“ Ansatz wie diese versuchen:

  • Verschieben Sie alle Assets in ein anderes Verzeichnis, z/attic
  • ein leeres Verzeichnis /images einrichten (oder was Ihr Asset-Verzeichnis genannt)
  • Einrichten einer .htaccess Datei (wenn Sie auf Apache natürlich sind), dass die -f Flag verwendet, leitet alle Anfragen an nicht existent Bilddateien zu einem Skript
  • das Skript kopiert die angeforderte Datei vom /attic in das /images Verzeichnis und zeigt es
  • die nächste Anfrage zu diesem Bild wird direkt auf das Bild gehen, weil es jetzt

Nach einiger Zeit und eine ausreichende Nutzung vorhanden ist, alle benötigt Bilder auf das Vermögen Verzeichnis kopiert werden sollte.

Es ist natürlich ein "weicher" Ansatz, da ein Dialog/eine Situation während dieser Zeit von keinem Benutzer geöffnet/eingegeben/benutzt werden konnte (Dinge wie zB Fehlersymbole). Aber es erkennt alle verwendeten Dateien, unabhängig davon, wo sie angefordert werden, und kann dabei helfen, viele der nicht benötigten Dateien zu entfernen.

+0

Nicht auf Apache, die Lösung muss im Kontext von Rails sein. – mwilliams

+0

Ich kenne Rails überhaupt nicht, aber ich kann mir vorstellen, dass es auch in Schienen möglich ist. Das Flag "-f" ist eine Regel, die mit Dateien übereinstimmt, die physisch existieren. –

Verwandte Themen