Как изменить привязку привязки по умолчанию к серверу разработки Rails 4.2? - программирование
Подтвердить что ты не робот

Как изменить привязку привязки по умолчанию к серверу разработки Rails 4.2?

После обновления нашего командного rails-приложения до 4.2, как упоминалось примечание к выпуску, привязка по умолчанию ip rails server to изменяется на localhost из 0.0.0.0.

Мы разрабатываем с помощью Vagrant и хотим, чтобы сервер разработки был доступен непосредственно из браузера на главной машине.

Вместо того, чтобы печатать rails s -b 0.0.0.0 каждый раз с этого момента, мне интересно, есть ли еще более элегантное решение, так что мы все равно можем использовать sth так же просто, как rails s, чтобы запустить сервер. Возможно:

  • Файл конфигурации rails s читает, где я могу изменить привязку по умолчанию по умолчанию (без использования -c)
  • порт вперед с бродягой (пробовал, но не смог, см. проблему, описанную ниже)
  • патч обезьяны в стойку, который изменяет привязку по умолчанию ip

Реальная цель заключается в том, что я хочу, чтобы обновление было гладким среди нашей команды, избегая сбоев, которые люди будут вынуждены постоянно перезапускать свой сервер рельсов из-за отсутствующей части -b 0.0.0.0.

Я пробовал переадресацию портальных портов, но все равно получаю Connection Refused, когда я нахожу localhost:3000 на главной машине. Две конфигурации, которые я пробовал, были:

config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000

Не удалось найти соответствующие инструкции в официальных документах. Любая помощь будет оценена.

4b9b3361

Ответ 1

У меня такая же проблема, и сегодня я нашел лучшее решение. Просто добавьте этот код в свой config/boot.rb, и он должен работать с бродягой.

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

ps: Его основано на: этом ответе

Ответ 2

Вы можете использовать foreman для запуска Procfile с помощью собственных команд:

# Procfile in Rails application root
web:     bundle exec rails s -b 0.0.0.0

Теперь запустите приложение Rails с помощью:

foreman start

Хорошая вещь о мастере заключается в том, что вы можете добавлять другие приложения в Procfile (например, sidekiq, mailcatcher).

Плохая вещь о бригадире заключается в том, что вам нужно тренировать свою команду для запуска foreman start вместо rails s.

Ответ 4

Если вы поместите параметры по умолчанию на config/boot.rb, тогда все атрибуты команд для rake и rails не сработают (пример: rake -T или rails g model user)! Итак, добавьте это значение в bin/rails после line 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 loks выглядит следующим образом:

#!/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'

Ответ 5

Для Rails 5.1.7 с Puma 3.12.1 выбранный ответ не работает, но я сделал это, добавив следующее в мой файл config/puma.rb:

set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port

port ENV.fetch('PORT') { 3000 }

Я определил это, проверив файл DSL. Он использует instance_eval для этого файла, поэтому, возможно, есть и другие способы сделать это, но мне это показалось наиболее разумным.

Ответ 6

Здесь более простое решение, которое я использую. Мне уже нравится/нужна dotenv и puma-heroku, поэтому, если использование этих функций не сработает для вас, это может быть не для вас.

/config/puma.rb

plugin :heroku

Gemfile

gem 'dotenv-rails', groups: [:development, :test]

.env

PORT=8080

Теперь я могу запустить оба dev и production с помощью rails s.

Ответ 7

Переключитесь на Puma и укажите port в config/puma.rb, например:

port        ENV.fetch("PORT") { 3000 }

Очевидно, он будет привязан к 0.0.0.0 для указанного порта: https://github.com/puma/puma/issues/896

Ответ 8

Если вы используете docker или другой инструмент для управления переменными среды, вы можете установить переменную среды HOST для IP-адреса, который вы хотите связать.

Пример: HOST=0.0.0.0

Добавьте его в файл docker.env, если вы используете Docker, или .env, если вы используете мастера.