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?ifENV["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”:
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: