Deploy: Bucket para subir imágenes
Clase 28 de 29 • Curso de Ruby on Rails: POO 2018
Deploy: Bucket para subir imágenes
Ya que Heroku no tiene soporte para cargar archivos (imágenes), debemos hacer una configuraciones extra para poder hacer que nuestra aplicación en Heroku tenga la capacidad de recibir imágenes desde un nuevo Article.
Primero necesitamos hacer unas configuraciones extras dentro de nuestra aplicación.
Iremos a nuestro Gemfile y dentro declararemos lo siguiente:
group :production do gem 'rails_12factor' gem 'heroku-deflater' # esta última habilita la compresión gzip end
Si revisamos la documentación de la gema “rails_12factor” podemos ver que para Rails 5 ya no necesitamos declarar esta gema dentro de nuestro Gemfile, pero tenemos que hacer una configuración en nuestro archivo de producción en config > enviroments > production.rb
# Disable serving static files from the `/public` folder by default since # Apache or NGINX already handles this. config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? if ENV["RAILS_LOG_TO_STDOUT"].present? logger = ActiveSupport::Logger.new(STDOUT) logger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(logger) end
Esto es gracias a que Heroku trabajó con el equipo que desarrolló Rails 5 para poder tener disponible la configuración desde la creación de nuestra aplicación con Rails 5.
Para esto utilizaremos en AWS un bucket de S3. En donde tendrás 1 año gratis.
Para esto necesitaremos:
-
Tener una cuenta en Amazon Web Services con el dato de una tarjeta de crédito o débito relacionado.
-
Crear un Bucket en S3: Iremos a Services y seleccionaremos S3.
-
Aquí dentro crearemos un nuevo bucket con el botón “Create bucket”.
-
Definimos el nombre de nuestro bucket (puedes ponerle el mismo nombre de tu aplicación).
-
En los permisos, concede acceso público para lectura en los Permisos Públicos.
-
Elegimos la región: US West.
-
Concede “Grant Amazon S3 Log Delivery group write access to this bucket”
-
El resto de la configuración puede quedar como está.
-
-
Crear un usuario en Identity & Access Management (IAM):
-
Para crear un Usuario, ve a la tab de Users.
-
Crea un usuario (puedes ponerle el mismo nombre de tu aplicación)
-
Otorga los accesos a “Programmatic access” y “AWS Management Console Access”.
-
Define un Custom Password.
-
Next: Permissions
-
Crea un grupo (puedes ponerle el mismo nombre de tu aplicación).
-
Agrega tu usuario al nuevo grupo creado seleccionando el grupo.
-
Next: Review
-
Crea a tu usuario.
-
Cierra
-
-
Este usuario deberá tener KEYs de acceso:
- Ve a Usuarios y da clic en el usuario que acabas de crear.
- Agrega un Policy a tu User con el botón “Add Permissions”.
- Da clic en “Attatch existing policies directly”
- Busca “amazons3”.
- Selecciona la opción “AmazonS3FullAccess”.
- Next: Review
- Add Permissions
- Una vez teniendo la política relacionada con tu User, ve a tu Usuario
- Da clic en Security Credentials.
- Crea un Access Key.
- Descárgalas en CSV (¡guárdalas bien!)
Ya que tengas la configuración en AWS para tu bucket en S3, deberás hacer unas confuguracioines extra en tu proyecto. Volvamos al Gemfile y agregemos la siguiente gema:
gem 'aws-sdk'
Una vez teniendo todas nuestras gemas, correremos un:
bundle
Y ahora iremos a nuestro archivo de production.rb de nuevo y pegaremos el siguiente código dentro de “Rails.application.configure do” y antes del “end”:
Rails.application.configure do config.paperclip_defaults = { :storage => :s3, s3_protocol: :https, :s3_credentials => { :bucket => ENV['S3_BUCKET_NAME'], :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] } } end
Aquí volvemos a ver las variables de entorno:
Línea de comando:
heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy S3_BUCKET_NAME=zzz
Los valores de estas variables son las que te descargaste de AWS en el archive CSV:
AWS_ACCESS_KEY_ID es tu S3 Access Key ID AWS_SECRET_ACCESS_KEY es tu Secret Key S3_BUCKET_NAME es el nombre que le diste a tu bucket (¿quizá fue el nombre de tu aplicación?)
Una vez teniendo esto, debemos hacer otro push a heroku:
git add . git commit -m “update: configuraciones para S3” git push Heroku master
Y de esta manera nuestra aplicación ya estará enviando nuestras imágenes de Article a un bucket en S3.
Te recomiendo leer este artículo de Heroku (inglés) para conocer de dónde vienen estas configuraciones.