An Active Storage service upload/download plugin that stores files in a PostgreSQL or MySQL database. Experimental support also for MSSQL and SQLite.
Attachment data get stored in a binary field (or blob).
Useful also with platforms like Heroku (due to their ephemeral file system).
- Setup Active Storage in your Rails application
- Add to your Gemfile
gem 'active_storage_db'
(and execute:bundle
) - Install the gem migrations:
bin/rails active_storage_db:install:migrations
(and execute:bin/rails db:migrate
) - Add to your
config/routes.rb
:mount ActiveStorageDB::Engine => '/active_storage_db'
- Change Active Storage service in config/environments/development.rb to:
config.active_storage.service = :db
- Add to config/storage.yml:
db:
service: DB
To setup a separate database connection for the ActiveStorageDB
migrations and files data:
- Add a different database configuration per environment to
config/database.yml
, e.g:
attachments:
database: attachments
migrations_paths: config/attachments_migrate
# other connection details ...
- Extend the ActiveStorage base record class providing the
connects_to
options (updating config/application.rb / using an initializer for ActiveStorageDB / overriding the base model like in the Rails guide):
# e.g. app/overrides/models/active_storage_db/application_record_override.rb
ActiveStorageDB::ApplicationRecord.class_eval do
connects_to database: { reading: :attachments, writing: :attachments }
end
- Move the ActiveStorageDB migrations to the specified migrations path
- Execute the rails db:migrate task
Some utility tasks are available:
# list attachments ordered by blob id desc (with limit 100):
bin/rails 'asdb:list'
# search attachments by filename (or part of it)
bin/rails 'asdb:search[some_filename]'
# download attachment by blob id (retrieved with list or search tasks) - the second argument is the destination:
bin/rails 'asdb:download[123,/tmp]'
Project created by Mattia Roccoberton, thanks also to the good guys that opened issues and pull requests from time to time.
For development information please check this document.
If you use this component just star it. A developer is more motivated to improve a project when there is some interest.
Or consider offering me a coffee, it's a small thing but it is greatly appreciated: about me.
The gem is available as open source under the terms of the MIT License.