Supprimer les images sur s3 ainsi que local
À propos de la suppression d'images avec Active Strage Je suis coincé, alors je vais le laisser comme un mémorandum. (Veuillez noter qu'il s'agit d'une description maladroite, donc cela peut être un gaspillage.)
Supprimez également les images inutiles sur s3.
modèle de poste Nom de colonne: chaîne Action nouvel index afficher modifier mettre à jour créer détruire La racine réside: messages
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina heroku
[Rails 5.2] Comment utiliser Active Storage C'était très facile à comprendre et à introduire, donc Veuillez l'introduire en vous référant ici.
[Rails] Comment activer la publication d'images dans Heroku (ActiveStorage + Amazon S3) Veuillez également vous y référer lors du déploiement sur heroku.
C'est le sujet principal. Le Guide Rails décrit comment le supprimer et utilise la méthode de purge. En utilisant cette méthode de purge, vous pouvez supprimer l'image s3 directement à partir de l'application rails.
python
#Détruisez de manière synchrone l'avatar et le fichier de ressources réel.
user.avatar.purge
#Détruit de manière asynchrone le modèle associé et le fichier de ressources réel via Active Job.
user.avatar.purge_later
Dans le cas où vous devez supprimer l'image de s3 (1) Lors de la mise à jour de l'image (2) Il est possible que le message associé à l'image ait été supprimé. De plus, la raison n'a pas encore été clarifiée, mais si vous utilisez purge au lieu de purge_later Parce que l'action de destruction n'a pas été détruite et que l'instruction if est devenue fausse. L'utilisation de purge_later a bien fonctionné. Pour supprimer une image, purge_later peut devoir être détruit de manière asynchrone.
L'ordre de @ post.image.purge_later && @ post.destroy Si vous faites d'abord @ post.destroy, @ post.image.purge_later Je pense que cela affectera le problème du serveur d'aws, donc je le fais dans cet ordre.
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
Publication / suppression de plusieurs images avec Active Storage J'ai essayé de l'implémenter en me référant à cet article, Dans mon environnement de développement
ActiveSupport::MessageVerifier::InvalidSignature
Parce que je n'ai pas pu le résoudre à cause de l'erreur
J'ai décidé de supprimer toutes les images.
Par conséquent, nous avons ajouté une nouvelle action img_destroy.
De plus, si vous utilisez purge_later pour supprimer plusieurs images au lieu de supprimer une image,
Parfois une erreur (je ne me souviens pas des détails, mais il y a trop de traitement?)
Il peut sortir, mais l'utilisation de la purge a bien fonctionné.
L'ordre de @ post.image.purge && @ post.destroy
Si vous faites d'abord @ post.destroy, @ post.image.purge
Je pense que cela affectera le problème du serveur d'aws, donc je le fais dans cet ordre.
#### **`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 "Tout supprimer", post_img_destroy_path(@post), method: :delete, "data-confirm" => "Es-tu sûr de vouloir le supprimer?", class: "btn btn-danger" %>
<% end %>
C'était une méthode pour supprimer l'image de s3 avec Active Strage, Il y a peut-être une meilleure façon de l'écrire pour tâtons.
J'ai moi-même déménagé vers ActiveStorage car je ne pouvais pas résoudre l'erreur gem refile-s3. J'espère pouvoir aider les gens dans la même situation. Pour plus d'informations ici
De plus, sur Twitter, les technologies et les idées qui n'ont pas été téléchargées sur Qiita sont également téléchargées, donc Je vous serais reconnaissant si vous pouviez me suivre. Cliquez ici pour plus de détails https://twitter.com/japwork
Recommended Posts