【问题标题】:Bind rails server to 127.0.0.1 by default默认绑定 rails server 到 127.0.0.1
【发布时间】:2015-07-08 20:44:03
【问题描述】:

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

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

rails server -b 127.0.0.1

?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4.1


【解决方案1】:

如果你使用 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

【讨论】:

    【解决方案2】:

    如果您正在搜索 Rails 5Answer


    Rails ~> 4.0你可以自定义Server类的启动部分:

    /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?

    How to change the default binding ip of Rails 4.2 development server?

    【讨论】:

    • 问题是绑定的IP,不是端口。我确信配置可以在同一个文件中,但在这里指定 IP 部分会很有用。
    • 添加了 Host 参数。
    • 这个文件被检入到版本控制中,对吧?如果在此处设置了值,那么它也在生产环境中设置。
    • 其实我不知道,但我假设你可以在文件中设置一个'if Rails.env ...'。没试过。
    • 这在 Rails 5 中不再有效。这对我有用:stackoverflow.com/a/33852354/520567
    【解决方案3】:

    我使用Foreman 作为开发中的流程经理。

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

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

    web: rails server -p $PORT -b 127.0.0.1
    

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

    【讨论】:

      【解决方案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:  '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'
      

      【讨论】:

        【解决方案5】:

        你可以制作一个 bash 脚本来默认运行命令:

        #!/bin/bash
        rails server -b 127.0.0.1
        

        把它和你的项目放在同一个文件夹中,给它起任何你想要的名字(例如devserv),然后

        chmod +x devserv
        

        你所要做的就是./devserv

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 2022-01-01
          相关资源
          最近更新 更多