A few months ago I posted an article/story about the 27 Gems I use in Almost Every SaaS Project. That received a ton of praise, as well as a little bit of negativity around using so many gems.
Rightfully so, blindly installing a whole bunch of gems without worrying about the status of the gems, maintainability and adding, even more, dependencies to the gem. When I wrote the previous article, I may have been a little exaggerative in that it seemed I would use all of those gems in every project, all of the time. There is always a trade off between writing your own code and using a gem. Whether it be the maintainability of the functionality or the sheer time/value prop.
Note: This article is based on an excerpt from a chapter in my upcoming book Building a SaaS Ruby on Rails on Rail 5. The book will guide you from humble beginnings through deploying an app to production. If you find this type of content valuable, you can grab a free chapter right now!
Here are a few more gems for your arsenal that may help you out!
Foreman — You can use this gem to run your applications from Procfiles. This can be handy when you need to run multiple applications or servers. Suppose you run your Puma webserver, ActionCable, Webpack development server, etc. With forman, you can just to have them all fire up at once.
VCR — This gem lets you record external web requests and replay them in future tests runs. This has two benefits, first you will be recording a known working version of the external request and then future test runs will just locally load up the YAML VCR stores.
Marginalia — This gem will add a comment to your SQL entries in your log to let you know what application, controller, and action the query may be coming from. This can be useful in debugging queries in your log that may not seem to directly correlate to an action.
BrakeMan — This is one of the few gems that you may not install through your Gemfile, but just through. BrakeMan is a security analysis tool that will let you know if your application has any security vulnerabilities.
Rack Mini Profiler — This gem here will help you keep your application fast by profiling each web request and showing you the time it takes in each part of your stack through a widget(that is only displayed in development)
RuboCop — Another analysis tool, but this time is linting your ruby files to check how well they are conforming to the Ruby Style Guide.
Concurrent Ruby — This isn’t necessarily a gem that goes in every Gemfile, but when I need to write my own concurrent code(such as data importers) I will reach this this bad boy to let me write concurrent Ruby in a style I feel comfortable in. Additionally, many popular gems actually use concurrent-ruby as the main dependency.
OmniAuth — If you need to deal with third party APIs, you will most likely need to deal with OAuth. If you have to deal with OAuth, you should use OmniAuth and their list of open source strategies to make OAuth as simple as a few configuration variables and some response handling.
Paranoia — There are a few gems for the functionality, but this one has always seemed to work the best for me. Soft-deleting is perfect for SaaS applications where associations and audits may still need data to exist, yet for the object to appear deleted in other instances.
MetaTags — This gem is one of those cases where for simple meta HTML tags you can skip a full gem and just content_for/yield a value from controllers. However, if you need a wider array of meta tags, this may be the gem for you.
Pundit — This gem came up in responses to my last post quite a bit. Pundit takes a simple Ruby class approach to authorization within your application. It does a lot less magic than and is used heavily by developers who like more explicit codebases. This is where Ruby/Rails developers can begin to diverge on tooling based on implicitness/explicitness preferences.
ActiveAdmin — If you're used to Django’s admin interface, or would simply like an admin area to manage data, etc then ActiveAdmin may be just what you need.
Those are some more of the picks I have for gems, do you have any you would like to share(even a shameless plug of your own)? Just comment below!