Note that the variable related with the "hostname" is removed from the Heroku instructions as it is not necessary to configure the Bucket.
2.5 KiB
Using AWS S3 as file storage
Although Consul Democracy stores most of its data in a PostgreSQL database, in Heroku all files, such as documents or images, must be stored elsewhere, such as AWS S3.
Adding the gem aws-sdk-s3
Add the following line to your Gemfile_custom:
gem "aws-sdk-s3", "~> 1"
And run bundle install to apply your changes.
Adding your credentials in secrets.yml
This guide assumes you have an Amazon account configured to use S3 and that you have created a bucket for your instance of Consul Democracy. It is strongly recommended to use a different bucket for each instance (production, preproduction, staging).
You will need the following information:
- The name of the S3 bucket.
- The region of the S3 bucket (
eu-central-1for UE-Francfort for example). - An access_key and a secret_key with read/write permission to that bucket.
WARNING: It is recommended to create IAM users (Identity and Access Management) who only have read/write permissions for the bucket you intend to use for that specific instance of Consul Democracy.
Once you have these pieces of information, you can save them as environment variables of the instance running Consul Democracy. In this tutorial, we save them respectively as S3_BUCKET, S3_REGION, S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY.
heroku config:set S3_BUCKET=example-bucket-name S3_REGION=eu-west-example S3_ACCESS_KEY_ID=xxxxxxxxx S3_SECRET_ACCESS_KEY=yyyyyyyyyy
Now add the following block to your secrets.yml file:
production:
s3:
access_key_id: <%= ENV["S3_ACCESS_KEY_ID"] %>
secret_access_key: <%= ENV["S3_SECRET_ACCESS_KEY"] %>
region: <%= ENV["S3_REGION"] %>
bucket: <%= ENV["S3_BUCKET"] %>
Enabling the use of S3 in the application
First, add the following line inside the class Application < Rails::Application class in the config/application_custom.rb file:
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :s3
Then, uncomment the s3 block that you will find in the storage.yml file:
s3:
service: S3
access_key_id: <%= Rails.application.secrets.dig(:s3, :access_key_id) %>
secret_access_key: <%= Rails.application.secrets.dig(:s3, :secret_access_key) %>
region: <%= Rails.application.secrets.dig(:s3, :region) %>
bucket: <%= Rails.application.secrets.dig(:s3, :bucket) %>
You will need to restart the application to apply the changes.