Доступ к webrick / rails с другого компьютера в локальной сети

У меня есть приложение rails, работающее на localhost: 3000. Я хочу получить доступ к нему с другого компьютера в той же сети. Я чувствую, что я делал это раньше с легкостью, но это дает мне некоторое горе. Я могу пинговать IP-адрес компьютера просто отлично, но нажатие ip:3000 в браузере не работает. Я пытался запустить rails s -b ipaddress ну и не повезло.

предложения?

7 ответов


попробуйте запустить сервер на порту 80 вместо этого, ваш брандмауэр, вероятно, блокирует порт 3000.


убедившись, что брандмауэр на стороне сервера открыт для входящего соединения на высоких портах (это обычно верно, а порт по умолчанию-3000, поэтому вам, вероятно, ничего не нужно делать), вы также должны запустить сервер следующим образом:

rails server -b 0.0.0.0

который связывает его с универсальным адресом. Он привязывается к localhost по умолчанию.

используя этот метод, вам не нужно привязываться к порту 80, но вам может понравиться это:

rails server -b 0.0.0.0 -p 80

(если вы используете rvm, то возможно, вам придется использовать rvmsudo)


чтобы сделать это изменение более постоянным, отредактируйте свой 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

тогда вам нужно только использовать rails s

источник:https://stackoverflow.com/a/29562898/1795429


rails server -b 0.0.0.0 -p 8000

это сработало для меня. Нет проблем с брандмауэром, и нет необходимости давать разрешения суперпользователя.


предполагая, что Webrick запускается без проблем, это 100% проблема брандмауэра. Вы должны предоставить некоторые спецификации, например, какая операционная система работает на вашем Хосте и есть ли у вас права администратора в отношении управления брандмауэром.

Если вы работаете в Linux и используете службу брандмауэра iptables, вам нужно добавить правило для приема трафика через порт 3000. Это будет выглядеть примерно так:

iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

эта команда будет одноразовым решением хотя вам нужно будет расширить текущий скрипт правил iptables, чтобы сделать его постоянным каждый раз, когда ваша система загружается или входит в систему.

Если вы используете Windows, в зависимости от того, используете ли вы XP или Vista/7, вам нужно будет сделать что-то подобное. Я собираюсь предположить, что вы находитесь в среде Vista / 7, и вам просто нужно будет выполнить шаги, предусмотренные в этом руководстве http://windows.microsoft.com/en-US/windows7/Open-a-port-in-Windows-Firewall.


  1. Да, это был хороший ответ в общем:

    rails server -b 0.0.0.0
    
  2. если вы используете Ubuntu, вам, вероятно, придется открыть порт в брандмауэр:

    sudo ufw allow 3000
    
  3. если ваша система работает в VirtualBox, вы должны проверить ваш Настройки Сети.

    в случае сетевого режима NAT вы должны нажать на расширенные параметры и там к Переадресация Портов. Добавьте правило для протокола TCP, хост-порта 3000 (или любого другого) и гостевого порта 3000.


одна из причин заключается в том, что ваш ip-адрес не привязан к серверу rails. Вы можете связать ip с-b Параметр команды.

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost

Я использую foreman для управления моим приложением на основе Procfile.

добавлять -b 0.0.0.0 мой bundle exec rails s команда в Procfile работала для меня.