Ответ 1
Rails 4.2 теперь привязывается к 127.0.0.1
по умолчанию, а не 0.0.0.0
.
Запустите сервер с помощью bin/rails server -b 0.0.0.0
, и он должен его отсортировать.
У меня есть Vagrant VM с Rails, установленным с образцом приложения. VM сконфигурирована для перенаправления порта 3000 (сервера Rails Webrick) на порт моего хоста 3000.
config.vm.network "forwarded_port", guest: 3000, host: 3000
Все настроено так, как показано во многих примерах.
Но, когда я пытаюсь получить доступ к http://localhost:3000
, ничего не происходит. Я также пытался отправить другие случайные порты, такие как 8081, 25600, без успеха. Выполнение запроса на завивание также не получает ничего (просто соединение reset сообщением однорангового узла), а запрос curl внутри VM работает отлично (как и ожидалось).
Как мой компьютер, так и моя виртуальная машина запускают Ubuntu 12.04. Я использую Ruby 2.2.0 и Rails 4.2.0.
Важным моментом является то, что Apache работает нормально. Я отправил порт 80 в порт 8080, и все работает. Похоже, что проблема связана только с сервером Rails, даже если я использую другие порты (rails server -p 4000
, например)
Rails 4.2 теперь привязывается к 127.0.0.1
по умолчанию, а не 0.0.0.0
.
Запустите сервер с помощью bin/rails server -b 0.0.0.0
, и он должен его отсортировать.
Для запуска на определенном порту:
rails server -b 0.0.0.0 -p 8520
Использование
rails s -b 0.0.0.0
или
Добавить в config/boot.rb
:
require 'rails/commands/server'
module Rails
class Server
new_defaults = Module.new do
def default_options
default_host = Rails.env == 'development' ? '0.0.0.0' : '127.0.0.1'
super.merge( Host: default_host )
end
end
# Note: Module#prepend requires Ruby 2.0 or later
prepend new_defaults
end
end
и работайте с rails s
Вы можете использовать псевдоним, на Ubuntu поместите его в ~/.bash_aliases
я использую: alias rs="rails server -b 0.0.0.0"
Вы должны перезагрузить терминал, прежде чем сможете его использовать
Действительно приятное объяснение найдено здесь: Rails 4.2.0.beta2 - Не удается подключиться к LocalHost?
У меня была точно такая же проблема, за исключением того, что мой компьютер является машиной Mac. Я использовал этот брандмауэр, чтобы заставить его работать (с virtualbox 4.3.36)
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Use Ubuntu 14.04 Trusty Tahr 64-bit as our operating system
config.vm.box = "ubuntu/trusty64"
# Configurate the virtual machine to use 2GB of RAM
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
end
config.vm.provision "shell", inline: <<-SHELL
## Install necessary dependencies
sudo apt-get --assume-yes install libsqlite3-dev libcurl4-openssl-dev git
## Install GPG keys and download rvm, ruby and rails
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -L https://get.rvm.io | bash -s stable --ruby
curl -L https://get.rvm.io | bash -s stable --rails
echo "[[ ls \"$HOME/.rvm/scripts/rvm\" ]] && . \"$HOME/.rvm/scripts/rvm\"" >> ~/.profile
## Adding vagrant user to the group that can access rvm
usermod -G rvm vagrant
SHELL
# Forward the Rails server default port to the host
config.vm.network :forwarded_port, guest: 3000, host: 3000
end
после запуска и запуска VM, я бы выполнил bundle install
в моем проекте repo, а затем rails server -b 0.0.0.0
.
Как указано в приведенном выше ответе:
127.0.0.1:3000 будет разрешать только соединения с этого адреса на порту 3000, тогда как 0.0.0.0:3000 разрешает соединения с любого адреса в порт 3000.
Так как Rails 4.2 принимает соединения только с localhost по умолчанию, вы можете получить доступ только к серверу с локального хоста (например, внутри виртуальной машины); соединения с другого компьютера (например, хост VM) не будут работать.