Ich bin ein Ruby-Anfänger, der mit Ruby on Rails Portfolios erstellt. Ich denke, dass es viele Leute gibt, die die Funktion zum Hochladen von Bildern in CarrierWave implementiert haben. Ich bin auch einer von ihnen. Dieses Juwel wird zum Zeitpunkt der Veröffentlichung für Benutzer-Avatar-Einstellungen und Bildanhänge verwendet, und die Bild-Upload-Funktion von CarrierWave wurde zur Bestätigung in verschiedenen Tests aufgenommen.
Beim Erstellen des Portfolios habe ich nach mehrmaligem Ausführen des Tests zufällig den Ordner angesehen, in dem die Bilder gespeichert sind ... ** Die Anzahl der Ordner beträgt 600! ?? ** ** **
Ich habe es überhaupt nicht bemerkt. Je mehr Sie den Test drehen, desto mehr Bilder, die im Testfall enthalten sind, werden immer wieder hochgeladen. Bevor ich es wusste, war mein Ordner eng mit Bildkapazität ...
Sie können es manuell ausschalten, aber der Test wird jedes Mal ausgeführt, wenn Sie eine Funktion umgestalten oder hinzufügen, was ziemlich ärgerlich ist. Also ** werde ich es so einstellen, dass das für den Test erstellte Bild von CarrierWave ** nach dem Ausführen des Tests gelöscht wird.
Ich entwickle Schienen, indem ich in Docker einen Container erstelle.
Docker for mac 2.3.0.4
Ruby on Rails 5.2.2
ruby 2.4.5
CarrierWave 2.1.0
Ich habe auf die folgende Seite von CarrierWaves Wiki verwiesen How to: Cleanup after your Rspec tests
Löschen Sie es, während Sie sich darauf beziehen, gemäß dem folgenden Ablauf. ** 1. Geben Sie den Upload-Ordner für den Test an (Uploeader-Datei) ** ** 2. Löschen Sie alle Ordner mit dem angegebenen Pfad, nachdem Sie den rspec-Test ausgeführt haben. **
** 1. Geben Sie während des Tests den Upload-Ordner an ** Da auch einige Cache-Dateien generiert werden (während der Fehlerprüfung Testfall) Geben Sie sowohl Cache- als auch Speicherordner an.
app/uploaders/***_uploader.rb
:
#Geben Sie einen Ordner im Cache an
def cache_dir
if Rails.env.test?
"uploads/#{Rails.env}/tmp/#{mounted_as}/#{model.id}"
else
"uploads/tmp/#{mounted_as}/#{model.id}"
end
end
#Geben Sie den Ordner des Geschäfts an
def store_dir
if Rails.env.test?
"uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
else
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
:
** 2. Löschen Sie alle Ordner mit dem angegebenen Pfad, nachdem Sie den rspec-Test ausgeführt haben. ** Schreiben Sie einen Pfad, um den oben angegebenen Cache und Speicherordner sofort zu löschen.
spec/spec_helper.rb
:
config.after(:all) do
if Rails.env.test?
FileUtils.rm_rf(Dir["#{Rails.root}/public/uploads/#{Rails.env}/"])
end
end
:
Dadurch wird der Testordner jedes Mal automatisch gelöscht, wenn Sie den rspec-Test ausführen.
Ich habe den Test viele Male ausgeführt und jetzt habe ich nicht viele Ordner oder engen Speicherplatz. Eindruck, dass sich die Verarbeitungsgeschwindigkeit von rspec etwas verlangsamt hat, weil der Löschvorgang in den Test eingetreten ist. Dies kann nicht geholfen werden, aber es ist eine gute Idee zu sagen, ob Sie während des Tests wirklich Bilder hochladen müssen, und wenn nicht, sollten Sie Fabriken ohne Bilder erstellen. Ich möchte auch die Testfälle überprüfen.
Recommended Posts