it-swarm.com.ru

Rails 4.2 Сервер переадресации портов на Vagrant не работает

У меня есть Vagrant VM с Rails, установленным с примером приложения. VM настроен для переадресации порта 3000 (сервера Rails Webrick) на мой порт Host 3000. 

config.vm.network "forwarded_port", guest: 3000, Host: 3000

Все настроено, как видно на многих примерах.

Но когда я пытаюсь получить доступ к http://localhost:3000, ничего не происходит. Я также пытался перенаправить на другие случайные порты, такие как 8081, 25600, но безуспешно. Выполнение запроса скручивания также ничего не дает (только сброс соединения с помощью сообщения peer), и запрос скручивания внутри VM работает отлично (как и ожидалось).

И мой ПК, и мой VM работают под управлением Ubuntu 12.04. Я использую Ruby 2.2.0 и Rails 4.2.0.

Важным моментом является то, что Apache работает нормально. Я перенаправил порт 80 на порт 8080, и все работает. Кажется, что проблема только с сервером Rails, даже если я использую другие порты (Rails server -p 4000, например)

45
Victor Leal

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

Запустите сервер, используя bin/Rails server -b 0.0.0.0, и это должно его отсортировать.

89
Max Woolf

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

Rails server -b 0.0.0.0 -p 8520
9
errakeshpd

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

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
shilovk

Действительно хорошее объяснение, найденное здесь: Rails 4.2.0.beta2 - Не удается подключиться к LocalHost?

У меня была точно такая же проблема, за исключением того, что мой компьютер - машина Mac. Я использовал этот vagrantfile, чтобы заставить его работать (с 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 в моем репозитории проекта, а затем Rails server -b 0.0.0.0. Как указано в связанном ответе выше: 

127.0.0.1:3000 будет разрешать соединения только с этого адреса через порт 3000, тогда как 0.0.0.0:3000 будет разрешать соединения с любого адреса в порт 3000.

Поскольку Rails 4.2 по умолчанию принимает соединения только от localhost, вы можете получить доступ к серверу только с локального хоста (например, внутри виртуальной машины); соединения с другого компьютера (например, хоста виртуальной машины) не будут работать.

0
da-na

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

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

0
noname