Подтвердить что ты не робот

Rails 4.2 Пересылка сервера на Vagrant не работает

У меня есть 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, например)

4b9b3361

Ответ 1

Rails 4.2 теперь привязывается к 127.0.0.1 по умолчанию, а не 0.0.0.0.

Запустите сервер с помощью bin/rails server -b 0.0.0.0, и он должен его отсортировать.

Ответ 2

Для запуска на определенном порту:

rails server -b 0.0.0.0 -p 8520

Ответ 3

Использование

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

Ответ 4

Вы можете использовать псевдоним, на Ubuntu поместите его в ~/.bash_aliases
я использую:
alias rs="rails server -b 0.0.0.0"

Вы должны перезагрузить терминал, прежде чем сможете его использовать

Ответ 5

Действительно приятное объяснение найдено здесь: 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) не будут работать.