The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2016-09-30
Desenvolvimento de software

DESENVOLVIMENTO GRATUITO COM AWS S3 E PAPERCLIP

Bartosz Zurkowski

Nos últimos anos, o armazenamento em linha tornou-se uma prática corrente, proporcionando arquitecturas altamente escaláveis, maior segurança e ampla acessibilidade aos dados. Um dos serviços de armazenamento mais populares é o Simple Storage Service da Amazónia, conhecido popularmente como S3.

O Amazon S3 é um serviço extremamente poderoso no centro da Amazon Serviços Web. No entanto, fora do ambiente de produção, pode ser difícil trabalhar com o S3. Envolve a passagem de chaves de acesso, o aprovisionamento de contas de utilizador e a manutenção de uma ligação de rede fiável, para não mencionar que custa dinheiro. O FakeS3 é um servidor leve que simula o comportamento do S3 real. Responde às mesmas chamadas que o Amazon S3 responde e armazena os ficheiros carregados no seu sistema de ficheiros local - não são feitos pedidos ao serviço da Amazon. Embora a gem não suporte o conjunto completo de comandos do S3, a API implementada é suficiente para a maioria dos casos de uso das aplicações.

Neste artigo, vou apresentar a abordagem de integração do AWS e FakeS3 com Paperclip - popular biblioteca de anexos de ficheiros para Active Record. O Paperclip e o S3 misturados fornecem um sistema eficaz de armazenamento de ficheiros que combina as funcionalidades principais do Paperclip (como a gestão de validações e transformações de imagem) com as vantagens do armazenamento online. Embora a configuração destas ferramentas não seja óbvia e exija a consulta de documentação detalhada, bem como a resolução de muitos problemas específicos das gemas, vale a pena gastar algum tempo para tornar o desenvolvimento mais rápido e eficiente.

Qual é o nosso objetivo?

A integração das ferramentas descritas requer três etapas:

  1. Lançamento do servidor falso S3 fornecido pela gem FakeS3 em segundo plano.
  2. Configuração do cliente AWS S3 para delegar todos os pedidos ao servidor falso lançado.
  3. Configurar o Paperclip para utilizar um endpoint S3 falso nos URLs dos recursos criados.

Instalação

Vamos começar por instalar as gemas necessárias:

# Gemfile

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

gem "fakes3", grupo: [:desenvolvimento, :teste]

Certifique-se de instalar a versão 1.6 do aws-sdk. O Paperclip, que usa SKD para gerenciar o armazenamento no serviço da Amazon, não funciona bem com versões superiores desta gem. Isso se deve a mudanças significativas na API do SDK trazidas com a versão 2.0.

Lembre-se também que o principal objetivo do FakeS3 é minimizar as dependências de tempo de execução. É mais uma ferramenta de desenvolvimento para testar chamadas S3 no seu código em vez de um servidor de produção que procura duplicar a funcionalidade S3. Por conseguinte, deve incluir a gema apenas no grupo de desenvolvimento e teste.

Configuração do AWS

O AWS SDK fornece um método auxiliar dedicado responsável pelo carregamento da configuração. Por padrão, ele carregará a configuração de config/aws.ymlextrair os seus parâmetros para o ambiente atual e passá-los para o cliente AWS. Em primeiro lugar, chamar o seguinte método num inicializador:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Agora, como o ficheiro de configuração está a ser carregado corretamente, podemos prosseguir com a especificação do seu conteúdo:

# config/aws.yml

desenvolvimento: &desenvolvimento
    access_key_id: "abc"
    secret_access_key: "abc"
    s3_endpoint: "localhost"
    s3_port: 10001
    s3_force_path_style: true
    use_ssl: false

teste: *desenvolvimento

Vamos analisar todos os parâmetros um a um:

  • access_key_id, secret_access_key - Credenciais de cliente AWS necessárias para obter acesso à sua conta Amazon. São ignoradas pelo falso servidor S3, portanto, valores personalizados em ambientes sandbox.
  • s3_endpoint, s3_port- Especificação do endpoint S3. Usamos estes parâmetros para substituir o endpoint S3 real pelo endpoint falso lançado pela gem FakeS3 - todos os pedidos ao serviço da Amazon serão agora delegados ao servidor falso local.
  • s3_force_path_style - O S3 aceita dois estilos de inclusão do nome do bucket no URL. Pode optar por colocar o nome do bucket no estilo de domínio (bucket.s3.amazonaws.com) ou no estilo de caminho (s3.amazonaws.com/bucket). Para manter as coisas simples e evitar configurações extras associadas ao mapeamento do subdomínio do bucket para o endereço de loopback, prefiro o estilo de caminho ao estilo de domínio no ambiente de desenvolvimento.
  • use_ssl - força o AWS SDK a usar HTTPS em vez de HTTP comum. Precisamos de desativar esta opção, porque a gema FakeS3 não suporta pedidos HTTPS que o cliente AWS executa por defeito.

A configuração para o ambiente de produção é bastante simples:

# config/aws.yml

produção: &produção
    access_key_id:     
    secret_access_key: 

staging: *produção

No entanto, desta vez, estamos a lidar com o serviço S3 real, pelo que é necessário fornecer credenciais AWS autênticas.

Devido a potenciais riscos de segurança, é uma boa prática manter valores secretos como chaves de acesso fora do seu sistema de controlo de versões, por exemplo, utilizando variáveis de ambiente. Vamos usar o ERB para injetar os seus valores no ficheiro de configuração.

Configuração de clipe de papel

Agora é hora de encarar o Paperclip e forçá-lo a trabalhar bem com o cliente S3 já configurado. O principal objetivo da configuração do Paperclip é obter o caminho de armazenamento que irá localizar os recursos alojados pelo fakeserver:

localhost:10001/:nome_do_balde/:caminho

Mais uma vez, vamos começar com o ambiente de desenvolvimento:

# config/paperclip.yml

desenvolvimento: &desenvolvimento
    armazenamento: :s3
    bucket: "development"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    caminho: ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias: "localhost:10001/development"

teste: *desenvolvimento
  • armazenamento - especifica o suporte de armazenamento (por defeito, sistema de ficheiros local). Uma vez que estamos a utilizar o AWS S3, temos de o alterar para :s3.
  • balde - nome do bucket S3 que irá armazenar os seus ficheiros. Se o bucket não existir, o Paperclip tentará criá-lo.
  • url - definido como :s3_alias_url fará com que o Paperclip faça o alias do nome do host do bucket S3 com o valor especificado por :s3_host_alias parâmetro.
  • s3_host_alias - alias para o host padrão do bucket S3. Observe que a colocação do nome do host, da porta e do bucket corresponde à configuração do cliente AWS.
  • caminho - padrão para as chaves sob as quais os ficheiros serão armazenados no bucket. As chaves devem ser únicas dentro do bucket, tal como os nomes dos ficheiros. Devido ao facto de o S3 não suportar diretórios, pode utilizar um / para simular estruturas de diretórios.
# config/paperclip.yml

produção: &produção
    armazenamento: :s3
    bucket:  
    url:     ":s3_domain_url"
    path:    ":class/:attachment/:id_partition/:style/:filename.:extension"

staging: *produção

Da mesma forma que as credenciais da AWS, o nome do bucket também é considerado um valor secreto que deve ser armazenado fora da sua base de código. Eu recomendo armazenar seu nome em uma variável de ambiente.

Por fim, junte a configuração às opções padrão do Paperclip em um inicializador:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Executar fakes3

As configurações do AWS e do Paperclip contêm uma referência ao fakeserver S3 local que se espera que seja executado em localhost:10001. Antes de trabalhar no desenvolvimento, deve lançar o servidor com o seguinte comando (fornecido pela gem FakeS3):

fakes3 -r public/system -p 10001

Os parâmetros passados são:

  • raiz -r - diretório raiz sob o qual os arquivos enviados serão armazenados. Considere excluí-lo do VCS se não quiser que os ficheiros carregados sejam armazenados no seu repositório.
  • porta -p - número da porta em que o servidor local será executado.

Se estiver a utilizar o Foreman para a gestão de processos na sua aplicação, poderá ser conveniente adicionar a seguinte entrada ao Procfile:

# Procfile

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

Isto poupar-lhe-á o tempo perdido no lançamento do fakeserver sempre que precisar de desenvolver algumas funcionalidades relacionadas com o S3.

Conclusão

Configurámos o cliente AWS para delegar todos os pedidos ao fakeserver local, configurámos o Paperclip para utilizar o endpoint S3 falso nos URLs dos recursos criados e lançámos o fakeserver fornecido pela gema Fake S3, armazenando todos os ficheiros no sistema de ficheiros local.

Como resultado, tornámo-nos independentes da ligação à Internet e poupámos dinheiro, tornando o nosso desenvolvimento mais rápido e mais fiável.

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

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

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

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