Configure Ruby on Rails com Paperclip 5 e S3 usando AWS SDK v2

Antes de começar, certifique-se de ter o Imagemagick instalado em sua máquina. Este é um componente necessário para o tutorial. Para fazer isso, siga as instruções da Image Processorseção aqui .

Em preparação para o lançamento do Rails 5, Paperclip devs atualizou a gem para a versão 5. Isso agora funciona com a versão 2 da gem ‘aws-sdk’. Anteriormente com Paperclip 4, precisávamos especificar gem 'aws-sdk' '< 2.0'em nosso arquivo gem, mas agora podemos ir com gem 'aws-sdk', '>= 2.0.34'(de acordo com a documentação do Paperclip) ou simplesmente gem 'aws-sdk'para a versão mais recente.

Ao mesmo tempo, você pode instalar o Paperclip 5 gem 'paperclip'inserindo seu gemfile. Com as duas novas entradas de gemfile presentes, execute bundle install.

Assim que as joias forem instaladas, é hora de definir a configuração do clipe de papel. Você pode fazer isso em config/application.rbou config/environment/<your environment>.rb(ou seja, config/environment/development.rbpara o ambiente de desenvolvimento). O código para configuração global deve ser assim:

#paperclip S3 
config
.paperclip_defaults = {
storage
: :s3,
s3_region
: ENV["AWS_S3_REGION"],
s3_credentials
: {
s3_host_name
: ENV["AWS_S3_HOST_NAME"],
bucket
: ENV["AWS_S3_BUCKET"],
access_key_id
: ENV["AWS_ACCESS_KEY_ID"],
secret_access_key
: ENV["AWS_SECRET_ACCESS_KEY"]
}
}

Para aqueles que vêm do Paperclip 4 e AWS SDK v1, observe que S3_regionagora é um (novo) parâmetro necessário

Estou usando a joia invejável para definir minhas variáveis ​​de ambiente. É fácil seguir as instruções de configuração na página do github vinculada. O clipe 5 / S3 ainda não funcionará porque ainda precisamos anexar uma imagem a um modelo. Gerando um modelo pela primeira vez, você poderia fazer algo assim:

rails g model Image image:attachment

Você provavelmente desejará incluir outros campos também, mas isso irá configurá-lo para carregar uma imagem para o banco de dados. Se você já tem um modelo e deseja adicionar uma imagem a ele, será necessário executar uma migração para adicionar um tipo de campo de anexo ao modelo existente. Após executar este comando e depois também migrá-lo para o banco de dados, o próximo passo será adicionar as informações necessárias ao arquivo de modelo de imagem (encontrado em ). Seu arquivo deve ser semelhante a este (sinta-se à vontade para alterar os tamanhos das imagens etc):rake db:migrateapp/models/image.rb

class Image < ActiveRecord::Base
has_attached_file
:image, :styles => { :medium => "300x300#", :thumb => "200x200#" }
validates_attachment
:image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
end

Finalmente, a última peça do quebra-cabeça é criar o balde S3 no console da AWS . Depois disso, crie as credenciais de usuário do IAM no painel AWS e conceda a ele todos os direitos de uso do S3 (a documentação do amazon é direta e o orientará ao fazer isso). Salve as credenciais de segurança do IAM em e respectivamente, o nome do intervalo em , o nome do host da região selecionada em e, finalmente, sua região em . Você pode encontrar a região correta e a informação do nome do host aqui .ENV["AWS_ACCESS_KEY_ID"]ENV["AWS_SECRET_ACCESS_KEY"]ENV["AWS_S3_BUCKET"]ENV["AWS_S3_HOST_NAME"]ENV["AWS_S3_REGION"]

Agora reinicie seu servidor de aplicativos Rails e você deve estar pronto para ir. Mais informações sobre como configurar formulários, etc, estão disponíveis na documentação do clipe de papel no topo da postagem ou em sua respectiva documentação gem (por exemplo, ActiveAdmin, Formtastic etc). Essencialmente, um campo de@image = Image.find(params[:id]) arquivo com: parâmetro de imagem anexado fará o upload de sua imagem para o S3. Para adicionar uma imagem a uma chamada de visualização no controlador e depois ` tag da imagem (@ image.image.url (: thumb)) : thumb : medium` (do exemplo do modelo acima) ou qualquer outro parâmetro / tamanho personalizado que você possa ter Especificadas.in the view. You can replacewith