"<模块:Rails>":类服务器的超类不匹配(类型错误)



我见过这个问题和其他几个问题,但他们的问题与我的问题不相似。

我在config/boot.rb中添加了以下代码,以便在8081 端口上运行我的服务器

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

然后我试着运行rails s,我面对的是这个错误:

/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)>'

做你想做的事的更好方法:

require 'rails/commands/server'
module DefaultOptions
  def default_options
    super.merge!(Port: 8081)
  end
end
Rails::Server.prepend(DefaultOptions)

出现错误消息的原因是您正试图重新定义Rails::Server类并更改其继承结构。Rails::Server继承自::Rack::Server,但是您的代码试图说它不再继承。因此,您会得到超类不匹配错误。

对于Rails5.1config/boot.rb中的以下行将起作用:

ENV['PORT'] = '8081'

链接到源。

Rails 5.2

config/puma.rb中,我添加了此代码。

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

它起作用了!

最新更新