Abstractions in Rails
As a powerful framework, Rails makes it easy for developers to build common patterns. It abstracts interfaces that can be used for integration with 3rd party service vendors without concerning about service-specific implementations.
As of major version 6.1, Rails provides following abstractions:
Active Record
Active Record is the most fundamental component in Rails. Every Rails developer should be familiar with it already. As an ORM framework, it abstracts the interactions with database, including persisting and retrieving model objects. With Active Record, developers hardly need to write any raw SQL query, if at all. Its database-agnostic Query Interface is not only easy to read and write, but also secure.
Active Job
Active Job provides a consistent interface for various types of background jobs. Developers don’t have to concern about different APIs, instead they program to an interface with one method perform
. After the job is defined, it can be either executed instantly (perform_now
), or enqueued and executed later (perform_later
). But in either case, it calls the perform
method, which is really the only thing that need to be implemented.
Choosing and switching from different queueing backends is also as easy as changing a few lines of configuration code. However, the choice largely depends on the features required. This page lists a number of natively supported backend adapters and their supported features.
Apart from those come with Rails, there are some other queueing backends that can be supported through Ruby Gem. For example, aws-sdk-rails
Gem “provides a lightweight, high performance SQS backend for ActiveJob”.
Action Mailer
Action Mailer abstracts the email sending process. Since sending email outside the request-response cycle is one of the most common tasks, Action Mailer can be easily integrated with Active Job – calling deliver_later
will send emails asynchronously, which rely on the queueing backend of Active Job.
Action Mailer comes with 4 pre-defined delivery methods: :smtp
, :sendmail
, :test
and :file
. But it’s possible to add more via Gems. For example, aws-sdk-rails
Gem “automatically register SES as an ActionMailer delivery method”.
Active Storage
Active Storage abstracts interactions with file storage. Specifically, it deals with attaching files to Active Records and removing them.
Active Storage facilitates uploading files to a cloud storage service like Amazon S3, Google Cloud Storage, or Microsoft Azure Storage and attaching those files to Active Record objects. It comes with a local disk-based service for development and testing and supports mirroring files to subordinate services for backups and migrations.
Rails guide
Rails 6.1 comes with native support for major cloud storage service providers, as is mentioned above. Developers can also implement support for other services.