  Sign In | Sign Up

  1. Home
  2. 
  3. Programming
  4. 

Ruby on Rails

Implement Two-factor-authentication in Rails with Devise, ActiveModel::Otp, and Google Authenticator

by Kevin

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…
Score: 2.49
06/24/2020

Step-by-Step guide on how to move from Sprockets to Webpacker

by Kevin

Why we write this guide  There are several reasons The official guide provides very little info. We underestimated the effort to do this. This long post explains our similar experience. Yet, that long post doesn't give a brief step-by-step guide. So, we decide to fill the gap.             1. Add Webpacker to Gemfile  We recommend you to leave the sprockets gem in your Gemfile if it's still needed. Or, if you plan to move gradually. Don't worry because both of them won't interfere with each other.  In our project, we do use both because we can't migrate all the javascript libs we use for various reasons we can't disclose.      At the last of this step, make sure you've run the bundle install command.      2. Configure the webpacker gem  There are many configurations on the webpacker documentation. Here, we'll focus on these three, to make you easier to start: config/webpack/loader/custom_loader.js config/webpack/loader/erb.js config/webpack/production.js Let's start with custom_loader.js. In this file, we use…
Score: 2.19
07/09/2020

Significantly Speed Up Showing Visits/Events of ahoy_matey gem by JSON Column Indexing in Rails

All of us want to visit a fast loading website. No one wants to wait for a slower website to load.  In the effort to speed up our website that is running Ruby on Rails, we decide to use the first-party analytics for Rails: ahoy_matey gem.  This article shows how to speed up showing the visitor/event counts of ahoy gem from 13 sec to 0.01 sec, more than 1,000 times faster!      Why we choose ahoy gem   It claims to be first-party analytics for Rails We'll have the server's side control. Any third-party analytics won't let us have this. It supports Rails 6 and its webpacker. It allows us to specify which pages on our Rails website to track. And the last one is it works with AMP.   However, the journey with ahoy_matey isn't a smooth one. Contrary to our belief, we notice the pages with ahoy_matey are much slower than those without it.  Something is wrong there.    InvestigationWe start our journey to investigate this problem. We begin with a page that's showing a list of articles. Every article there has a…
Score: 1.98
08/28/2020

How to migrate from jquery-ujs to rails-ujs

by Kevin

Why do this?  As usual, we'll start with why. Why do this to our existing Ruby on Rails application? There are several reasons We always keep our Ruby on Rails application up to date. Starting from Rails 5.1.0, rails-ujs is a part of the Rails itself. We hate duplication. Why should we keep using jquery-rails (the gem for jquery-ujs) if Rails itself already has the rails-ujs with similar functionality? We love to keep our Gemfile clean. We drop any gem that we don't use anymore. Jquery-rails is one of them. Last but not least, we love to keep everything simple       Recommended requirement  Before migrating from jquery-ujs to rails-ujs, we recommend the Ruby on Rails application has the following: Integration tests. In our project, we use capybara and selenium, with some headless browsers. Unit tests. We use RSpec for this. Supported Rails version. At the time we did this, we've upgraded our Rails version to 6.0.2.1 Latest ruby version. We used 2.6.5 when we migrated long ago. Make sure all the…
Score: 1.77
07/18/2020

Optimize your Rails Code with Bullet Gem and Speed Up your site!

by Kevin

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…
Score: 1.69
07/03/2020

How to create Accelerated Mobile Page (AMP) in rails website

by Kevin

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.65
07/05/2020

Privacy settings changed!

Article is saved. Do you want to continue editing the article or leave and edit later?

Not logged in, Please login to continue

Location: United States (en)
  • United States (us)
  • 日本 (jp)
  • Indonesia (id)
  • India (in)
Terms and Conditions | Privacy Policy | About Us
FAQ | Contact Us
 
© 2023 123ish