Background There are many gems for implementing two-factor authentication for Rails app out there. But, most of them don't work properly with Devise out from the box. Some gems offering seamless integration with Devise gem never work smoothly with our existing Rails app. This is why we share our experience and strategy to implement two-factor authentication using Devise and ActiveModel::Otp gems. This implementation, based on our experience, works very well with the latest Google Authenticator app of both iPhone and Android (version 5.10 as of 2020/06). The rqrcode gem does a nice job to provide us with QR code that's always scannable by the Google Authenticator. Oh, we run this on Ruby 2.6.6 and Rails 6. So, we can guarantee it's working with the latest Rails version at the time we write this (2020/06). 1. Prepare Gemfile You need to add several gems to achieve this. If you have an existing Rails app with Devise already, then feel free to skip the devise gem and add the rest of them. In…
Why Bullet Gem? For this Rails optimization, we'll focus on optimizing repeated SQL calls to retrieve objects associated with many relationships: N+1 queries problem. The solution to such an issue is an eager loading association. Unoptimized N+1 affected code takes a significantly longer time as N times additional SQL calls are needed. But, we should be careful when using that eager loading approach. This because unused eager loading can deteriorate our Rails app performance instead of improving it. It's where the Bullet gem comes in handy. This gem will help us to find where
the N+1 queries problem is happening.
the eager loading associate is unused.
How to use Bullet Gem? This depends on the current application's state. In our case, we do these:
Add the bullet gem into Gemfile.
Define a new Rails environment called optimization.
Configure it to install the gem for that environment only
Run the Rails app with that environment
1. Add the Bullet gem into Gemfile. Here, we use its latest…
Accelerated Mobile Page (AMP) is a framework for creating a fast and light-weight mobile website. There are not many ruby gems for creating AMP pages for the existing Rails website. We find one like rails_amp. But it doesn't fit our needs. That's why we come up with our solution. It's a simple but powerful one. Here's how we create AMP pages for our Rails website. Add custom Mime::Type We add custom Mime at config/initializers/mime_types.rb
It's only one line code. The code registers amp as a new custom format for text/html. This way, we'll be able to handle this format on our controllers. This leads us to the next step. Add amp format to the controller There is no need to add this to all of the controllers. We only add it to one of the actions in the controller that serves the article pages. Here's the explanation of that gist
That format.amp will render the AMP pages when the user's browser requested it. So, when Google bots or your user's browser visits your AMP URL handled by that…
Score: 1.22
Privacy settings changed!
Article is saved. Do you want to continue editing the article or leave and edit later?