Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is adding a Rails middleware like this causing endless redirects?

I'm trying to add some middleware to a Rails project I'm working on, and when I try to do so, it seems to cause an endless loop.

Specifically, I have the following middleware shell file:

# app/middleware/log_data.rb

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

    def call(env)
        # To-do: Write code here.
    end
end

I then created a new middleware directory under the app directory and put the file in that directory.

After that, I added the following towards the bottom of config/application.rb:

config.middleware.use("LogData")

After restarting the Puma server running on Vagrant with sudo service puma restart, if I run rake middleware, I can see the middleware correctly show up in the list towards the bottom.

However, when I try to refresh the website, it fails with an endless loop, displaying the following in Chrome:

enter image description here

If I comment out the config.middleware.use("LogData") line in config/application.rb, then the middleware disappears from the rake middleware command list, and the website stops crashing and loads properly.

What am I doing wrong? What am I missing? I imagine it's something simple, but I'm not sure why a simple (and empty) shell middleware file would cause the whole site to crash. Thank you.

I should note that I'm using Rails 4.2.11, which I know is old, but upgrading right now is not an option.

like image 378
HartleySan Avatar asked Jan 24 '26 16:01

HartleySan


1 Answers

Your middleware does nothing, returns nil (which translates to an Incomplete Server Response), and basically the request ends there. It needs to return something (an array of [status, headers, response], or call the env) to allow the request to pass through the middleware chain.

# app/middleware/log_data.rb

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

   def call(env)
    # To-do: Write code here.
    
    # this should be at the very end of the method
    @app.call(env)
   end
end

Here is more info about middlewares.

like image 89
razvans Avatar answered Jan 27 '26 08:01

razvans



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!