После обновления приложения rails нашей команды до 4.2, как упоминалось в примечании к выпуску , IP-адрес по умолчанию для привязки rails server
изменен на localhost
from 0.0.0.0
.
Мы разрабатываем с помощью Vagrant и хотим, чтобы сервер разработки был доступен непосредственно из браузера на хост-машине.
Вместо того, чтобы печатать rails s -b 0.0.0.0
каждый раз с этого момента, мне интересно, есть ли более элегантное решение, чтобы мы по-прежнему могли использовать sth так же просто, как rails s
запускать сервер. Возможно:
- файл конфигурации
rails s
читает, где я могу изменить привязку ip по умолчанию (без использования-c
) - порт вперед с бродягой (пробовал, но не удалось, см. проблему, обнаруженную ниже)
- патч обезьяны для стойки, который изменяет привязку ip по умолчанию
Настоящая цель заключается в том, чтобы обновление было плавным для нашей команды, избегая сбоя, из-за которого людям придется постоянно перезапускать свой сервер rails из-за отсутствующей -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
Не нашел соответствующих инструкций в официальных документах. Любая помощь будет оценена по достоинству.
источник
HOST=0.0.0.0
, и сервер разработки Rails автоматически будет использовать это значение.Ответы:
У меня такая же проблема, и сегодня я нашел лучшее решение. Просто добавьте этот код в свой config / boot.rb, и он должен работать с vagrant.
require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end
ps: Это основано на этом ответе
источник
Вы можете использовать foreman для запуска
Procfile
с вашими пользовательскими командами:# Procfile in Rails application root web: bundle exec rails s -b 0.0.0.0
Теперь запустите ваше приложение Rails с помощью:
foreman start
Преимущество foreman в том, что вы можете добавлять в Procfile другие приложения (например, sidekiq, mailcatcher).
Плохая черта прораба в том, что вы должны обучать свою команду бегу,
foreman start
а не бегуrails s
.источник
foreman s
вариант также подойдет - возможно, это более легкий переход сrails s
.Встретил ту же проблему. Нашел блог Make Rails 4.2 server слушает все интерфейсы .
Добавьте следующее в config / boot.rb
require 'rails/commands/server' module Rails class Server alias :default_options_bk :default_options def default_options default_options_bk.merge!(Host: '0.0.0.0') end end end
источник
Для 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
этот файл, поэтому, вероятно, есть другие способы сделать это, но мне это показалось наиболее разумным.источник
Если вы установите параметры по умолчанию,
config/boot.rb
то все атрибуты команд для rake и rails не работают (пример:rake -T
илиrails 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'
источник
Вот более простое решение, которое я использую. Мне уже нравятся / нужны dotenv и puma-heroku , поэтому, если их использование не работает для вас, возможно, это не для вас.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
Теперь я могу начать разработку и производство с
rails s
.источник
Переключитесь Puma и указать
port
вconfig/puma.rb
, например:port ENV.fetch("PORT") { 3000 }
По-видимому, он будет привязан к 0.0.0.0 для указанного порта: https://github.com/puma/puma/issues/896
источник
Если вы используете докер или другой инструмент для управления переменными среды, вы можете установить для
HOST
переменной окружения IP-адрес, который необходимо привязать.Пример:
HOST=0.0.0.0
Добавьте его в
docker.env
файл, если вы используете Docker или.env
Foreman.источник
Для Rails 5 с Puma выбранный ответ не работает. Вы можете получить такую ошибку:
cannot load such file -- rails/commands/server
Для правильного решения добавьте следующее
config/puma.rb
:bind 'tcp://0.0.0.0:3000'
источник