如何更改Rails 4应用程序的默认端口?

时间:2013-08-07 12:24:23

标签: port ruby-on-rails-4 webrick

我知道我可以通过-p选项在另一个端口上启动rails服务器。但是,只要我启动webrick,我就想为每个应用程序设置另一个端口。

有什么想法吗?

此致 菲利克斯

5 个答案:

答案 0 :(得分:35)

将此附加到config/boot.rb

require 'rails/commands/server'

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

Rails::Server.send(:prepend, DefaultOptions)

注意:需要ruby> = 2.0。

答案 1 :(得分:32)

快速解决方案:附加到Rakefile

task :server do
  `bundle exec rails s -p 8080`
end

然后运行rake server

答案 2 :(得分:21)

选项1:

您可以像这样启动WEBrick:

    rails server -p 8080

8080是你的港口。如果您愿意,可以将其放在bash脚本中以方便使用。

选项2:

您可以安装$ gem install foreman,然后使用工头启动您的Procfile中定义的生产网络服务器(例如独角兽),如下所示:$ foreman run web。如果unicorn是您的Web服务器,您可以在unicorn配置文件中指定端口(与大多数服务器选择一样)。这种方法的好处是,您不仅可以在配置中设置端口,而且还可以使用更接近生产的环境。

答案 3 :(得分:4)

如果您将默认选项放在config/boot.rb上,那么rake和rails的所有命令属性都会失败(例如:rake -Trails g model user)!所以,追加在行bin/rails之后到require_relative '../config/boot',并且只为rails服务器命令执行代码:

if ARGV.first == 's' || ARGV.first == 'server'
  require 'rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

bin/rails文件像这样:

#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application',  __FILE__)
require_relative '../config/boot'

# Set default host and port to rails server
if ARGV.first == 's' || ARGV.first == 'server'
  require 'rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

require 'rails/commands'

答案 4 :(得分:2)

对于Rails 5.1:

# config/boot.rb

# ... existing code

require 'rails/command'
require 'rails/commands/server/server_command'

Rails::Command::ServerCommand.send(:remove_const, 'DEFAULT_PORT')
Rails::Command::ServerCommand.const_set('DEFAULT_PORT', 3333)