2015-03-28 3 views
2

Я пытаюсь запустить приложение ror в доме друга, и приложение недоступно извне. Вот что мы пробовали.Нет доступа к серверу рельсов, работающему за брандмауэром

Приложение было создано с

$ rails new <application name> 

и начал с

$ rails server 

запуска сервера разработки и доступен на http://localhost:3000

Следующая вещь, которую мы активировали переадресацию портов на маршрутизаторе он использует для подключения к Интернету: мы сопоставили внешний порт 3000 с портом 3000 на внутреннем хосте, на котором запущен сервер rails нин. Когда я пытаюсь открыть страницу извне (с помощью firefox), я получаю страницу с ошибкой: не удается подключиться к хосту, хост может быть недоступен, попробуйте подключиться позже.

Вещи, которые мы попробовали:

  1. Изменен порт пересылки 80 -> 80
  2. установлен и запущен Apache: по умолчанию Apache страницы достижима.
  3. Остановил Apache и запустил сервер rails на порту 80 (с sudo, иначе он не может использовать порт 80): сервер rails недоступен.

Я также проверил брандмауэр машины, работающей на сервере рельсов. ОС - ubuntu 12.04: брандмауэр (не менее ufw) неактивен. Я также могу подключиться к этой машине, используя порт 22/ssh.

Сведение:

  • рельсы сервер доступен на порту 3000 на локальном хосте
  • перенаправление портов работает на портах 22 и 80, и оба сервера SSH и сервера Apache достижимы сервер
  • Рельсы не доступен на обоих портах 80 и 3000 снаружи

Единственное, что я могу придумать, это то, что рельсы могут иметь механизм, похожий на ALLOWED_HOSTS от Django, и что он ref использует внешние запросы, потому что они предназначены для другого хоста, чем localhost. Тем не менее, я ничего не нашел по этой теме. Кроме того, файлы журнала приложения не показывают попыток подключения, которые был отклонен сервером rails.

Итак, у нас нет идей. Что мы должны проверить дальше?

ответ

8

До Rails 4.2 по умолчанию для rails server была привязка ко всем интерфейсам. В Rails 4.2 это изменилось только для привязки к 127.0.0.1 по умолчанию - в журналах приложений ничего нет, потому что сокет просто не слушает соединение на других сетевых интерфейсах.

Чтобы разрешить доступ с другого компьютера, необходимо использовать опцию -b для связывания дополнительных IP-адресов, например

rails s -b 0.0.0.0 

связываться со всеми доступными адресами IP. Вы можете, конечно, заменить 0.0.0.0 с одним из фактических IP-адресов вашего устройства, хотя вы, конечно, должны будут изменить этот вызов, когда изменился IP-адрес вашего компьютера.

+0

Мы действительно используем рельсы 4.2 и, следуя вашим указаниям, мы решили проблему. +1 – Giorgio

Смежные вопросы