Hashmita Raut
Hashmita Raut

Reputation: 171

How to add middleware in Rails 4.2 application

I am trying to learn Middlewares and been practising how to mount it in the Rails application. I have followed the railscast

So far I have implemented these steps:

1) Created a new Rails 4.2 application called: Blog

2) Added a file in the lib folder named as response_timer.rb.

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

  def call(env)
    [200, {"Content-Type" => "text/html"}, "Hello World"]
  end
end

3) Added config.middleware.use "ResponseTimer" in application.rb.

config.middleware.use "ResponseTimer"

But as i'm hitting the command rake middleware in the terminal, it is reporting this error:

rake aborted!
NameError: uninitialized constant ResponseTimer

I tried also to add the config.middleware.use "ResponseTimer" in the development.rb but again facing the same error.

What am i missing here?

Please help.

Referenced article: http://guides.rubyonrails.org/rails_on_rack.html

Upvotes: 6

Views: 2281

Answers (2)

Richard Peck
Richard Peck

Reputation: 76774

Middleware has to have an accompanying module / class, and needs to be loaded in the app before it can be referenced. The way to do this in Rails is with autoloading (lib files aren't autoloaded by default):

#config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.middleware.use "ResponseTimer"

The above should work for you.

Upvotes: 5

Hashmita Raut
Hashmita Raut

Reputation: 171

I followed this answer: https://stackoverflow.com/a/24122424

I tried it before but maybe missed something before.

In appliation.rb

require 'rails/all'
require_relative '../lib/response_timer'
module Blog
 class Application < Rails::Application
  ...
  config.middleware.use ResponseTimer
 end
end

Upvotes: -2

Related Questions