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


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

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

7 53

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 работала для меня.