Löschen Sie Bilder sowohl auf s3 als auch lokal
Informationen zum Löschen von Bildern mit Active Strage Ich stecke fest, also lasse ich es als Memorandum. (Bitte beachten Sie, dass dies eine fummelige Beschreibung ist, daher kann es verschwenderisch sein.)
Löschen Sie auch unnötige Bilder auf s3.
Postmodell Spaltenname: Zeichenfolge Aktion neuer Index show edit update create destroy Stammwohnheime: Beiträge
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina heroku
[Rails 5.2] Verwendung von Active Storage Das war sehr leicht zu verstehen und leicht einzuführen Bitte stellen Sie es hier vor.
[Rails] So aktivieren Sie das Posten von Bildern in Heroku (ActiveStorage + Amazon S3) Bitte beachten Sie dies auch bei der Bereitstellung auf Heroku.
Dies ist das Hauptthema. Das Rails-Handbuch beschreibt das Löschen und verwendet die Bereinigungsmethode. Mit dieser Bereinigungsmethode können Sie das Image von s3 direkt aus der Rails-App löschen.
python
#Zerstöre synchron den Avatar und die eigentliche Ressourcendatei.
user.avatar.purge
#Zerstört asynchron das zugehörige Modell und die eigentliche Ressourcendatei über Active Job.
user.avatar.purge_later
In dem Fall, dass Sie das Bild von s3 löschen müssen (1) Beim Aktualisieren des Bildes (2) Möglicherweise wurde der mit dem Bild verknüpfte Beitrag gelöscht. Auch der Grund wurde noch nicht geklärt, aber wenn Sie purge anstelle von purge_later verwenden Weil die Zerstörungsaktion nicht zerstört wurde und die if-Anweisung falsch wurde. Die Verwendung von purge_later hat gut funktioniert. Zum Löschen eines Bildes muss purge_later möglicherweise asynchron zerstört werden.
Die Reihenfolge von @ post.image.purge_later && @ post.destroy Wenn Sie zuerst @ post.destroy ausführen, wird @ post.image.purge_later dies tun Ich denke, dass es die Serverprobleme von aws beeinflussen wird, also mache ich es in dieser Reihenfolge.
app/controllers/posts_controller.rb
def update
@post = Post.find(params[:id])
if @post.image.attached?
@post.image.purge_later
end
if @post.update(post_params)
redirect_to post_path(@post)
else
render :edit
end
end
def destroy
@post = Post.find(params[:id])
if @post.image.attached?
if @post.image.purge_later && @post.destroy
redirect_to posts_path
else
render :edit
end
else
if @post.destroy
redirect_to posts_path
else
render :edit
end
end
end
private
def post_params
params.require(:post).permit(:name, :image)
end
Veröffentlichen / Löschen mehrerer Bilder mit Active Storage Ich habe versucht, es unter Bezugnahme auf diesen Artikel zu implementieren. In meiner Entwicklungsumgebung
ActiveSupport::MessageVerifier::InvalidSignature
Weil ich es wegen des Fehlers nicht lösen konnte
Ich habe beschlossen, alle Bilder zu löschen.
Daher haben wir eine neue Aktion img_destroy hinzugefügt.
Wenn Sie purge_later verwenden, um mehrere Bilder zu löschen, anstatt nur ein Bild zu löschen,
Gelegentlich ein Fehler (Ich erinnere mich nicht an die Details, aber es wird zu viel verarbeitet?)
Es kann herauskommen, aber die Verwendung der Spülung hat gut funktioniert.
Die Reihenfolge von @ post.image.purge && @ post.destroy
Wenn Sie zuerst @ post.destroy ausführen, wird @ post.image.purge dies tun
Ich denke, dass es die Serverprobleme von aws beeinflussen wird, also mache ich es in dieser Reihenfolge.
#### **`python`**
```rb
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to post_path(@post)
else
render :edit
end
end
def destroy
@post = Post.find(params[:id])
if @post.images.attached?
if @post.images.purge && @post.destroy
redirect_to posts_path
else
render :edit
end
else
if @post.destroy
redirect_to posts_path
else
render :edit
end
end
end
def img_destroy
@post = Post.find(params[:id])
if @post.images.purge
redirect_to edit_post_path(@post)
else
render :edit
end
end
private
def post_params
params.require(:post).permit(:name,images: [])
end
config/routes.rb
delete 'post_image_delete/:id', to: 'posts#img_destroy', as: 'post_img_destroy'
erb:app/views/posts/edit.html.erb
<% if @post.images.attached? %>
<%= link_to "Alles löschen", post_img_destroy_path(@post), method: :delete, "data-confirm" => "Möchten Sie es wirklich löschen?", class: "btn btn-danger" %>
<% end %>
Es war eine Methode, um das Bild von s3 zusammen mit Active Strage zu löschen. Es gibt vielleicht einen besseren Weg, es zum Tappen zu schreiben.
Ich selbst bin zu ActiveStorage gewechselt, weil ich den gem refile-s3-Fehler nicht beheben konnte. Ich hoffe, ich kann Menschen in der gleichen Situation helfen. Weitere Informationen hier
Auf Twitter werden auch Technologien und Ideen hochgeladen, die nicht auf Qiita hochgeladen wurden Ich wäre Ihnen dankbar, wenn Sie mir folgen könnten. Klicken Sie hier für Details https://twitter.com/japwork
Recommended Posts