window.pipedriveLeadboosterConfig = { base : 'leadbooster-chat.pipedrive.com', companyId : 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version : 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster existe déjà') } else { w.LeadBooster = { q : [], on : function (n, h) { this.q.push({ t : 'o', n : n, h : h }) }, trigger : function (n) { this.q.push({ t : 't', n : n }) }, } } })() thecodest, Author at The Codest - Page 18 of 18

Amazon S3 est un service extrêmement puissant au cœur d'Amazon Web Services. Cependant, en dehors de l'environnement de production, il peut être difficile de travailler avec S3. Il implique de faire circuler des clés d'accès, de provisionner des comptes d'utilisateurs et de maintenir une connexion réseau fiable - sans compter que cela coûte de l'argent. FakeS3 est un serveur léger qui simule le comportement du vrai S3. Il répond aux mêmes appels qu'Amazon S3 et stocke les fichiers téléchargés dans votre système de fichiers local - aucune demande n'est faite au service d'Amazon. Bien que gem ne supporte pas l'ensemble des commandes S3, l'API implémentée est suffisante pour la plupart des cas d'utilisation des applications.

Dans cet article, je vais présenter l'approche de l'intégration d'AWS et de FakeS3 avec Paperclip - une bibliothèque populaire d'attachement de fichiers pour Active Record. Paperclip et S3 combinés ensemble fournissent un système de stockage de fichiers efficace qui combine les fonctionnalités de base de Paperclip (comme la gestion des validations et les transformations d'images) avec les avantages du stockage en ligne. Bien que la configuration de ces outils ne soit pas évidente et nécessite de creuser dans la documentation détaillée ainsi que de résoudre de nombreux problèmes spécifiques aux gemmes, cela vaut la peine de passer un peu de temps à rendre le développement plus rapide et plus efficace.

Quel est notre objectif ?

L'intégration des outils décrits se fait en trois étapes :

  1. Lancement du faux serveur S3 fourni par la gemme FakeS3 en arrière-plan.
  2. Configuration du client AWS S3 pour qu'il délègue toutes les requêtes au fakeserver lancé.
  3. Configurer Paperclip pour utiliser un faux point de terminaison S3 dans les URLs des ressources construites.

Installation

Commençons par installer les gemmes nécessaires :

Fichier Gemfile #

gem "paperclip"
gem "aws-sdk", "~> 1.6"

gem "fakes3", groupe : [:development, :test]

Assurez-vous d'installer la version 1.6 de aws-sdk. Paperclip, qui utilise SKD pour gérer le stockage dans le service d'Amazon, ne fonctionne pas bien avec les versions supérieures de cette gemme. Ceci est dû à des changements significatifs dans l'API du SDK apportés avec la version 2.0.

Rappelez-vous également que l'objectif principal de FakeS3 est de minimiser les dépendances d'exécution. Il s'agit plutôt d'un outil de développement permettant de tester les appels S3 dans votre projet code plutôt qu'un serveur de production cherchant à reproduire les fonctionnalités de S3. Par conséquent, vous ne devriez inclure la gem que dans les groupes de développement et de test.

Configuration AWS

Le SDK AWS fournit une méthode d'aide dédiée au chargement de la configuration. Par défaut, elle chargera la configuration à partir de config/aws.ymlLe client AWS doit être en mesure d'extraire les paramètres de l'environnement actuel et de les transmettre au client AWS. Tout d'abord, appelez la méthode suivante dans un initialisateur :

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Maintenant que le fichier de configuration est correctement chargé, nous pouvons procéder à la spécification de son contenu :

# config/aws.yml

développement : &développement
    access_key_id : "abc"
    secret_access_key : "abc"
    s3_endpoint : "localhost"
    s3_port : 10001
    s3_force_path_style : true
    use_ssl : false

test : *développement

Examinons tous les paramètres un par un :

La configuration de l'environnement de production est assez simple :

# config/aws.yml

production : &production
    access_key_id :     
    secret_access_key : 

staging : *production

Cette fois-ci, cependant, nous avons affaire à un véritable service S3, et vous devez donc fournir des informations d'identification AWS authentiques.

En raison des risques de sécurité potentiels, il est préférable de garder les valeurs secrètes comme les clés d'accès en dehors de votre système de contrôle de version, par exemple en utilisant des variables d'environnement. Nous utiliserons ERB pour injecter ses valeurs dans le fichier de configuration.

Configuration du trombone

Il est maintenant temps d'affronter Paperclip et de le forcer à travailler avec le client S3 déjà configuré. L'objectif principal de la configuration de Paperclip est d'obtenir le chemin de stockage qui localisera les ressources hébergées par fakeserver :

localhost:10001/:nom_du_seau/:chemin d'accès

Commençons par l'environnement de développement :

# config/paperclip.yml

développement : &développement
    stockage : :s3
    bucket : "développement"
    s3_host_name : "localhost"
    url : ":s3_alias_url"
    path : ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias : "localhost:10001/development"

test : *développement
# config/paperclip.yml

production : &production
    stockage : :s3
    bucket :  
    url :     ":s3_domain_url"
    path :    ":class/:attachment/:id_partition/:style/:filename.:extension"

staging : *production

Tout comme les informations d'identification AWS, le nom du seau est également considéré comme une valeur secrète qui doit être stockée en dehors de votre base de code. Je recommande de stocker son nom dans une variable d'environnement.

Enfin, la configuration est intégrée aux options par défaut de Paperclip dans un initialisateur :

# config/initializers/paperclip.rb

paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys !

Paperclip::Attachment.default_options.merge ! paperclip_defaults

Faux en cours d'exécution3

Les configurations AWS et Paperclip contiennent toutes deux une référence au serveur local S3 fakeserver qui est censé s'exécuter sous localhost:10001. Avant de travailler sur le développement, vous devez lancer le serveur avec la commande suivante (fournie par la gem FakeS3) :

fakes3 -r public/system -p 10001

Les paramètres transmis sont les suivants :

Si vous utilisez Foreman pour la gestion des processus dans votre application, il peut être utile d'ajouter l'entrée suivante dans Procfile :

# Procfile

fakes3 : fakes3 -r ${FAKES3_STORAGE_PATH:-public/system} -p ${FAKES3_PORT:-10001}

Cela vous évitera de perdre du temps à lancer fakeserver chaque fois que vous aurez besoin de développer des fonctionnalités liées à S3.

Conclusion

Nous avons configuré le client AWS pour qu'il délègue toutes les requêtes au fakeserver local, configuré Paperclip pour qu'il utilise le faux point de terminaison S3 dans les URL des ressources construites et lancé le fakeserver fourni par la gemme Fake S3 qui stocke tous les fichiers dans le système de fichiers local.

En conséquence, nous sommes devenus indépendants de la connexion Internet et avons économisé de l'argent en rendant notre développement plus rapide et plus fiable.

fr_FRFrench