window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } 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 es un servicio extremadamente potente en el núcleo de Amazon Web Services. Sin embargo, fuera del entorno de producción, puede resultar complicado trabajar con S3. Implica pasar claves de acceso, aprovisionar cuentas de usuario y mantener una conexión de red fiable, por no mencionar que cuesta dinero. FakeS3 es un servidor ligero que simula el comportamiento del S3 real. Responde a las mismas llamadas a las que responde Amazon S3 y almacena los archivos subidos en tu sistema de archivos local - sin hacer peticiones al servicio de Amazon. Aunque gem no soporta el conjunto completo de comandos de S3, la API implementada es suficiente para la mayoría de los casos de uso de las aplicaciones.

En este artículo voy a presentar el enfoque de la integración de AWS y FakeS3 con Paperclip - popular biblioteca de archivos adjuntos para Active Record. Paperclip y S3 mezclados proporcionan un sistema de almacenamiento de archivos efectivo que combina las útiles características principales de Paperclip (como la gestión de validaciones y transformaciones de imágenes) con las ventajas del almacenamiento online. Aunque la configuración de estas herramientas no es obvia y requiere profundizar en la documentación detallada así como resolver muchos problemas específicos de las gemas, merece la pena dedicar algo de tiempo a hacer que el desarrollo sea más rápido y eficiente.

¿Cuál es nuestro objetivo?

La integración de las herramientas descritas requiere tres pasos:

  1. Lanzamiento de S3 fakeserver proporcionado por la gema FakeS3 en segundo plano.
  2. Configuración del cliente AWS S3 para delegar todas las solicitudes a fakeserver lanzado.
  3. Configurar Paperclip para usar un endpoint S3 falso en las URLs de los recursos construidos.

Instalación

Empecemos por instalar las gemas necesarias:

# Gemfile

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

gem "fakes3", group: [:desarrollo, :prueba]

Asegúrate de instalar la versión 1.6 de aws-sdk. Paperclip, que utiliza SKD para gestionar el almacenamiento en el servicio de Amazon, no funciona bien con versiones superiores de esta gema. Esto se debe a cambios significativos en la API del SDK traídos con la versión 2.0.

Recuerda también que el objetivo principal de FakeS3 es minimizar las dependencias en tiempo de ejecución. Es más una herramienta de desarrollo para probar las llamadas S3 en su código en lugar de un servidor de producción que busca duplicar la funcionalidad de S3. Por lo tanto, debe incluir la gema solo en el grupo de desarrollo y pruebas.

Configuración de AWS

AWS SDK proporciona un método de ayuda dedicado responsable de cargar la configuración. Por defecto, cargará la configuración desde config/aws.ymlextrae sus parámetros para el entorno actual y los pasa al cliente AWS. En primer lugar, llame al siguiente método en un inicializador:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Ahora que el archivo de configuración se ha cargado correctamente, podemos proceder a especificar su contenido:

# config/aws.yml

desarrollo: &desarrollo
    access_key_id: "abc"
    clave_acceso_secreto: "abc"
    s3_endpoint: "localhost"
    s3_port: 10001
    s3_force_path_style: true
    use_ssl: false

test: *desarrollo

Analicemos todos los parámetros uno por uno:

La configuración para el entorno de producción es bastante sencilla:

# config/aws.yml

producción: &producción
    access_key_id:     
    clave_acceso_secreto: 

staging: *production

Esta vez, sin embargo, estamos tratando con el servicio real de S3, por lo tanto usted necesita proporcionar credenciales auténticas de AWS.

Debido a los riesgos potenciales de seguridad, es una buena práctica mantener los valores secretos como las claves de acceso fuera de su sistema de control de versiones, por ejemplo, mediante el uso de variables de entorno. Usaremos ERB para inyectar sus valores en el fichero de configuración.

Configuración Paperclip

Ahora es el momento de enfrentarse a Paperclip y forzarlo para que funcione correctamente con el cliente S3 ya configurado. El objetivo principal de la configuración de Paperclip es obtener la ruta de almacenamiento que localizará los recursos alojados en fakeserver:

localhost:10001/:nombre_cubo/:ruta

De nuevo, empecemos por el entorno de desarrollo:

# config/paperclip.yml

desarrollo: &desarrollo
    almacenamiento: :s3
    cubo: "desarrollo"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    ruta: ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias: "localhost:10001/desarrollo"

test: *desarrollo
# config/paperclip.yml

producción: &producción
    almacenamiento: :s3
    bucket:  
    url:     ":s3_dominio_url"
    ruta:    ":class/:attachment/:id_partition/:style/:filename.:extension"

puesta en escena: *producción

Al igual que las credenciales de AWS, el nombre del bucket también se considera un valor secreto que debe almacenarse fuera de tu código base. Recomiendo almacenar su nombre en una variable de entorno.

Por último, fusionar la configuración en las opciones por defecto de Paperclip en un inicializador:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Ejecutar fakes3

Tanto la configuración de AWS como la de Paperclip contienen una referencia al fakeserver local de S3 que se espera que se ejecute bajo localhost:10001. Antes de trabajar en el desarrollo debe lanzar el servidor con el siguiente comando (proporcionado por la gema FakeS3):

fakes3 -r public/system -p 10001

Los parámetros pasados son:

Si está utilizando Foreman para la gestión de procesos en su aplicación, puede ser conveniente añadir la siguiente entrada en Procfile:

# Procfile

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

Esto te ahorrará tiempo perdido en lanzar fakeserver cada vez que necesites desarrollar alguna funcionalidad relacionada con S3.

Conclusión

Hemos configurado el cliente de AWS para que delegue todas las solicitudes al servidor falso local, hemos configurado Paperclip para que utilice el punto de enlace de S3 falso en las URL de los recursos creados y hemos lanzado el servidor falso proporcionado por la gema de S3 falso almacenando todos los archivos en el sistema de archivos local.

Como resultado, nos independizamos de la conexión a Internet y ahorramos dinero haciendo nuestro desarrollo más rápido y fiable.

es_ESSpanish