Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Включаем Active Storage и загрузку изображений в Amazon S3

Включаем Active Storage и загрузку изображений в Amazon S3
Включаем Active Storage и загрузку изображений в Amazon S3

 

Первым делом:

rails active_storage:install
rails db:migrate

Далее:

# config/environments/production.rb
config.active_storage.service = :amazon

Для среды разработки оставляем:

config.active_storage.service = :local

ну или как захочется.

Добавляем в Gemfile и бундлим:

gem 'aws-sdk-s3'

Добавляем в модель:

class Post < ApplicationRecord
-------
has_one_attached :image
-------

, либо, если нужна возможность добавлять к статье несколько изображений, а не одно:

has_many_attached :images

Теперь в app/admin/posts.rb добавляем одну-единственную новую строчку:

f.input :image, as: :file
# f.input :images, as: :file, input_html: { multiple: true }

, и там же обновляем permit_params:

permit_params :title, :text, :tag_list, :image
# permit_params :title, :text, :tag_list, images: []

 

Взглянуть Blog on Rails на Heroku.

Увидеть на гитхабе.

 

Далее в Amazon S3 создаем корзину, bucket settings => "Block all public access", далее "My Security Credentials" и добавляем IAM-юзера, чекбоксы "Programmatic access" и "AWS Management Console access" отмечены. "Attach existing policies directly" => выбираем "AmazonS3FullAccess". Копируем "Access key ID" и "Secret access key", также понадобятся имя корзины и регион. Все, консоль AWS на этом можно закрыть.

Для записи environment variables (переменные среды) я использовал в данном проекте figaro, соответственно - добавил в application.yml (и в консоль Heroku, Reveal Config Vars) две строчки, значения которых у вас теперь тоже есть:

AWS_ACCESS_KEY_ID: '*********************'
AWS_SECRET_ACCESS_KEY: '****************************'

Также, очень возможно, для Heroku лишним не будет:

RAILS_MASTER_KEY: '************************'

, т. к. config/master.key обычно по умолчанию внесен в .gitignore.

Осталось только раскомментировать amazon:

# config/storage.yml
amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: us-east-2
bucket: masterpro


...и все уже должно работать.

Оставить комментарий

Добавьте ваш комментарий

В блоге