27 de Fevereiro de 2024 - @Walmir Neto
Ontem mostrei Fazendo upload com ActiveStorage, mas na maioria dos casos não adianta muito fazer upload localmente, pois caso precise reconfigurar o servidor, seja porque motivo for, existe a possibilidade de perder os arquivos, para que isso não aconteça uma das opções de upload em nuvem é o AWS S3 e hoje é isso que vamos fazer… E para salvar na AWS precisamos…
Precisamos criar tofu/aws_s3_buckets.tf
variable "s3_bucket_name" {
type = string
description = "S3 bucket name"
default = "rails-demo-development" # must be unique
}
resource "aws_s3_bucket" "demo_bucket" {
bucket = var.s3_bucket_name
tags = {
Name = var.s3_bucket_name
Environment = "development"
}
}
Agora é só roda:
cd tofu
tofu validate # to validate if code is valid
tofu plan # to check if everything is ok
tofu apply -auto-approve # DON'T USE `-auto-approve` if you're not sure
Com isso o bucket será criado
Vamos precisar adicionar o sdk
da AWS as nossas dependências
bundle add aws-sdk-s3
Isso vai alterar nosso Gemfile
--- a/Gemfile
+++ b/Gemfile
gem "avo", ">= 3.2"
gem "devise", "~> 4.9", ">= 4.9.3"
# <https://github.com/tigrish/devise-i18n#customizing-views>
gem "devise-i18n", "~> 1.12"
+# <https://github.com/aws/aws-sdk-ruby#configuration>
+gem "aws-sdk-s3", "~> 1.143"
No arquivo config/environments/development.rb
vamos precisar alterar
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
Rails.application.configure do
end
# Store uploaded files on the local file system (see config/storage.yml for options).
- config.active_storage.service = :local
+ config.active_storage.service = :amazon
Agora precisamos descomentar “amazon" no config/storage.yml
--- a/config/storage.yml
+++ b/config/storage.yml
local:
root: <%= Rails.root.join("storage") %>
# Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
-# amazon:
-# service: S3
-# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
-# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
-# region: us-east-1
-# bucket: your_own_bucket-<%= Rails.env %>
+amazon:
+ service: S3
+ access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
+ secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
+ region: us-east-1
+ bucket: rails-demo-<%= Rails.env %>
Agora é preciso adicionar as chaves da AWS nas credentials