The project is in a healthy, maintained state
An ActiveStorage service plugin to store files in database.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

Runtime

>= 6.0
 Project Readme

Active Storage DB

gem version gem downloads maintainability

linters Specs Postgres Rails 8.0 Specs MySQL Rails 8.0

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).

Installation

  • 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

Customizations

To setup a separate database connection for the ActiveStorageDB migrations and files data:

  1. Add a different database configuration per environment to config/database.yml, e.g:
attachments:
  database: attachments
  migrations_paths: config/attachments_migrate
  # other connection details ...
  1. 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
  1. Move the ActiveStorageDB migrations to the specified migrations path
  2. Execute the rails db:migrate task

Misc

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]'

Development

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.

Do you like it? Star it!

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.

License

The gem is available as open source under the terms of the MIT License.