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 }) }, } } })() DESARROLLO GRATUITO CON AWS S3 Y PAPERCLIP - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2016-09-30
Desarrollo de software

DESARROLLO GRATUITO CON AWS S3 Y PAPERCLIP

Bartosz Zurkowski

En los últimos años se ha generalizado el almacenamiento en línea, que ofrece arquitecturas altamente escalables, mayor seguridad y amplia accesibilidad a los datos. Uno de los servicios de almacenamiento más populares es Amazons's Simple Storage Service, conocido popularmente como S3.

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 integrar AWS y FakeS3 con Paperclip - popular biblioteca de archivos adjuntos para Active Record. Paperclip y S3 mezclados proporcionan un sistema eficaz de almacenamiento de archivos que combina las útiles características principales de Paperclip (como la gestión de validaciones y las transformaciones de imágenes) con las ventajas del almacenamiento en línea. 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:

  • access_key_id, secret_access_key - Credenciales de cliente de AWS necesarias para acceder a su cuenta de Amazon. Son ignoradas por el falso servidor S3, de ahí los valores personalizados en entornos sandbox.
  • s3_endpoint, s3_port- Especificación del endpoint S3. Usamos estos parámetros para reemplazar el endpoint S3 real con el endpoint falso lanzado por la gema FakeS3 - todas las peticiones al servicio de Amazon serán ahora delegadas al fakeserver local.
  • s3_force_path_style - S3 acepta dos estilos para incluir el nombre del bucket en la URL. Puede elegir que el nombre del bucket se coloque al estilo del dominio (bucket.s3.amazonaws.com) o al estilo de la ruta (s3.amazonaws.com/bucket). Con el fin de mantener las cosas simples y evitar la configuración adicional asociada con la asignación de subdominio del cubo a la dirección loopback prefiero el estilo de ruta sobre el estilo de dominio en el entorno de desarrollo.
  • use_ssl - obliga a AWS SDK a utilizar HTTPS en lugar de HTTP. Necesitamos deshabilitar esta opción, porque la gema FakeS3 no soporta peticiones HTTPS que el cliente AWS realiza por defecto.

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
  • almacenamiento - especifica el soporte de almacenamiento (por defecto sistema de archivos local). Como estamos usando AWS S3 necesitamos cambiarlo a :s3.
  • cubo - nombre del bucket S3 que almacenará sus archivos. Si el bucket no existe, Paperclip intentará crearlo.
  • url - ajustado a :s3_alias_url hará que Paperclip asigne un alias al nombre de host del bucket S3 con el valor especificado por :s3_host_alias parámetro.
  • s3_host_alias - alias para el host del bucket S3 por defecto. Tenga en cuenta que la colocación del host, el puerto y el nombre del bucket corresponden a la configuración del cliente de AWS.
  • ruta - para las claves con las que se almacenarán los archivos en el bucket. Las claves deben ser únicas dentro del bucket, como los nombres de archivo. Debido al hecho de que S3 no soporta directorios, puede utilizar una clave / para simular estructuras de directorios.
# 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:

  • root -r - directorio raíz bajo el cual se almacenarán los archivos subidos. Considere excluirlo de VCS si no desea que los archivos subidos se almacenen en su repositorio.
  • puerto -p - número de puerto en el que se ejecutará el servidor local.

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.

Artículos relacionados

Desarrollo de software

Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

EL MEJOR
Desarrollo de software

Las 10 mejores empresas de desarrollo de software de Letonia

Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

thecodest
Soluciones para empresas y escalas

Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

thecodest
Desarrollo de software

La guía definitiva para subcontratar en Polonia

El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

TheCodest
Soluciones para empresas y escalas

Guía completa de herramientas y técnicas de auditoría informática

Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

The Codest
Jakub Jakubowicz CTO y Cofundador

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

    es_ESSpanish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish