Доступ к webrick / rails с другого компьютера в локальной сети - PullRequest
56 голосов
/ 07 сентября 2011

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

Предложения

Ответы [ 7 ]

156 голосов
/ 09 марта 2015

Убедившись, что брандмауэр на стороне сервера открыт для входящего соединения на высоких портах (это обычно так, и порт по умолчанию - 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

22 голосов
/ 02 сентября 2015
rails server -b 0.0.0.0 -p 8000

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

5 голосов
/ 18 декабря 2016
  1. Да, это был хороший ответ в целом :

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

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

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

4 голосов
/ 07 сентября 2011

Если 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.

2 голосов
/ 07 сентября 2011

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

0 голосов
/ 10 мая 2018

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

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

0 голосов
/ 21 октября 2015

Одной из причин является то, что ваш 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
...