默认绑定 rails 服务器到 127.0.0.1

Bind rails server to 127.0.0.1 by default

我想将 rails 服务器绑定到 127.0.0.1,而不是 0.0.0.0,因此当我在咖啡店工作时无法访问它。

是否有一个配置文件,我可以在其中指定此选项,这样我就不必通过命令行开关:

rails server -b 127.0.0.1

?

默认情况下,您可以制作一个 bash 脚本来仅 运行 命令:

#!/bin/bash
rails server -b 127.0.0.1

将其放在与您的项目相同的文件夹中,随意命名(例如devserv),然后

chmod +x devserv

而你所要做的就是./devserv

如果您正在搜索 Rails 5


Rails ~> 4.0中您可以自定义服务器的引导部分class:

/config/boot.rb中添加这行:

require 'rails/commands/server'

module Rails
  class Server
    def default_options
      super.merge({Port: 10524, Host: '127.0.0.1'})
    end
  end
end

已经回答了这个问题:

How to change Rails 3 server default port in develoment?

如果您将默认选项放在 config/boot.rb 上,那么 rake 和 rails 的所有命令属性都会失败(例如:rake -Trails g model user) ! 因此,将此附加到 bin/railsrequire_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:  '127.0.0.1', Port: 10524)
      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:  '127.0.0.1', Port: 10524)
      end
    end
  end
end

require 'rails/commands'

我在开发中使用 Foreman 作为流程管理员。

gem 'foreman' 添加到您的 Gemfile 并 运行 宁 bundle install 后,在您的应用程序目录的根目录中创建一个文件 Procfile

虽然您可以添加行来管理其他进程,但我的只是读取:

web: rails server -p $PORT -b 127.0.0.1

然后,通过 Procfile 启动 Rails 服务器,运行 foreman start。如果这里有其他进程(Redis、worker),它们将同时启动。

如果您使用的是 puma,有几种方法:

  1. config/puma中添加:
bind 'tcp://localhost:3001'

但是,这会导致 puma 监听两个或更多端口。

  1. config/puma中添加:
port ENV.fetch("PORT") { 3000 }, 'localhost'
  1. 如果您不想破坏您的 puma 文件,请尝试在 <puma_gem_path>/lib/puma/configuration.rb 中修改 puma 的默认配置,然后执行以下操作:
DefaultTCPHost = 'localhost'

Source Code