3 votes

Rails Active Storage & AWS S3 : Comment attacher une image à un modèle via seeds.rb et ensuite la stocker dans un seau privé S3 ?

Pour un projet scolaire, je travaille sur une application Rails qui "vend" des photos de chatons. J'ai choisi 10 photos de chats en ligne, elles sont actuellement sur mon ordinateur. J'utilise Postgresql pour la base de données. J'ai une classe/modèle Item qui représente les photos de chatons.

Ce que je cherche, c'est un moyen, lors de la génération de fausses données par le biais de seeds.rb en attachant une photo du chaton à chaque boucle. Item qui sera ensuite stocké dans un seau AWS S3 déjà créé (il s'appelle catz-temple ). J'ai mes deux clés d'accès et secrètes S3 sur une .env j'ai déjà modifié mon fichier storage.yml comme suit :

amazon:
    service: S3
    access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
    secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
    region: eu-central-1
    bucket: catz-temple

J'ai découvert qu'il y avait une pierre précieuse appelée aws-sdk-ruby mais je n'arrive pas à trouver l'approche que je devrais avoir sur ce sujet.

Pour l'instant, je me contente de mettre mon seau en accès public et de prendre les urls des photos de chaque seau, mais il n'y a pas d'API ni d'approche sécurisée pour cela...

Merci à tous

3voto

papirtiger Points 1870

Commencez par suivre les guides pour configurer ActiveStorage et S3 . Configurez ensuite les pièces jointes sur votre modèle.

class Kitteh < ApplicationRecord
  has_one_attached :photo
end

Avec ActiveStorage, vous pouvez joindre directement des fichiers aux dossiers en passant un objet IO :

photos = Rails.root.join('path/to/the/images', '*.{jpg,gif,png}')
100.times do |n|
  path = photos.sample
  File.open(path) do |file|
    Kitteh.new(name: "Kitteh #{n}") do |k|
      k.photo.attach(
        io: file,
        filename: path.basename 
      )
    end.save!
  end
end

Cet exemple crée 100 enregistrements avec une image aléatoire sélectionnée dans un répertoire de votre disque dur et la téléchargera vers le stockage que vous avez configuré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X