Sal-laS
Sal-laS

Reputation: 11649

`<module:Rails>': superclass mismatch for class Server (TypeError)

I have seen this and several others question, but their problems are not similar to mine.

I have added the following code to the config/boot.rb , to run my server on port 8081

module Rails
  class Server
    def default_options
      super.merge({Port: 8081})
    end
  end
end

Then I tried to run rails s, and i face with this erorr:

/usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.4/lib/rails/commands/server.rb:7:in `<module:Rails>': superclass mismatch for class Server (TypeError)
        from /usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.2.4/lib/rails/commands/server.rb:6:in `<top (required)>'

Upvotes: 4

Views: 3782

Answers (3)

mahfuz
mahfuz

Reputation: 3223

In Rails 5.2

in config/puma.rb I added this code.

#port        ENV.fetch("PORT") { 3000 }
bind        'tcp://0.0.0.0:3001'

And it works!

Upvotes: 2

Alexander Azarov
Alexander Azarov

Reputation: 13221

For Rails 5.1 the following line in config/boot.rb will do the trick:

ENV['PORT'] = '8081'

Link to the source.

Upvotes: 5

smoak
smoak

Reputation: 15024

A better way to do what you want:

require 'rails/commands/server'

module DefaultOptions
  def default_options
    super.merge!(Port: 8081)
  end
end

Rails::Server.prepend(DefaultOptions)

The reason for the error message is because you are attempting to redefine the Rails::Server class and changing it's inheritance structure. Rails::Server inherits from ::Rack::Server, however your code is trying to say it no longer does. Therefore, you get your superclass mismatch error.

Upvotes: 15

Related Questions