DEV Community

Germán Alberto Gimenez Silva
Germán Alberto Gimenez Silva

Posted on • Originally published at rubystacknews.com on

🧱 Behind the Scenes of a Rails App: Understanding Middleware

June 18, 2025

Have you ever wondered what happens to an HTTP request before it hits your Rails controller? 🤔 Let me introduce you to a powerful but often overlooked part of Ruby on Rails: middleware.

What is Middleware?


Request
  ↓
[Middleware 1]
  ↓
[Middleware 2]
  ↓
[Rails Router / Controller / App]
  ↓
[Middleware 3]
  ↓
Response

Enter fullscreen mode Exit fullscreen mode

Middleware is like a series of gates that every HTTP request must pass through before reaching your application—and again on the way back with the response. It’s part of the Rack interface that Rails is built on.

Article content
What is Middleware?

Think of it as a customizable pipeline:

🔄 Each layer can inspect, modify, redirect, or even halt the request or response.

Why Should You Care?

Middleware lets you handle cross-cutting concerns like:

  • ✅ Logging request timing
  • 🔐 Authenticating tokens (e.g., JWT)
  • 🌐 Setting CORS headers
  • 🚦 Throttling API requests
  • 🧪 Injecting test/debug behavior without touching business logic

A Simple Example: Logging Middleware

Let’s say we want to log the start and end time of each request:


# app/middleware/my_custom_logger.rb

class MyCustomLogger
  def initialize(app)
    @app = app
  end

  def call(env)
    Rails.logger.info "Request started at #{Time.now}"
    status, headers, response = @app.call(env)
    Rails.logger.info "Request finished at #{Time.now}"

Enter fullscreen mode Exit fullscreen mode

end end

To activate it in your app, add this line to config/application.rb:


config.middleware.use MyCustomLogger

Enter fullscreen mode Exit fullscreen mode

The Takeaway

Middleware offers a clean, modular way to extend your app’s behavior—before your controllers even come into play. Whether you’re building APIs, adding observability, or hardening security, middleware can be a powerful ally.

Have you written your own middleware or used some creative ones in production? Let’s discuss!

Article content

Top comments (0)