2015-01-06 9 views
45

Ich habe eine Vagrant VM mit Rails mit einer Beispiel-App installiert. Die VM ist so konfiguriert, dass sie den Port 3000 (des Rails Webrick Servers) an meinen Host 3000 Port weiterleitet.Rails 4.2 Server Port Forwarding auf Vagrant funktioniert nicht

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

Alles ist konfiguriert, wie in vielen Beispielen gesehen.

Aber, wenn ich versuche, http://localhost:3000 nichts passiert zuzugreifen. Ich habe auch versucht, zu anderen zufälligen Häfen wie 8081, 25600 ohne Erfolg weiterzuleiten. Doing eine Curl-Anfrage erhält auch nichts (nur eine Verbindung zurückgesetzt durch die Peer-Nachricht), und eine Curl-Anfrage innerhalb VM funktioniert perfekt (wie erwartet).

Sowohl mein PC als auch meine VM läuft Ubuntu 12.04. Ich benutze Ruby 2.2.0 und Rails 4.2.0.

Ein wichtiger Punkt ist, dass Apache normal funktioniert. Ich habe den Port 80 an Port 8080 weitergeleitet und alles funktioniert. Es scheint, dass das Problem nur mit dem Rails-Server auftritt, selbst wenn ich andere Ports verwende (rails server -p 4000 zum Beispiel)

Antwort

87

Rails 4.2 bindet jetzt standardmäßig an 127.0.0.1 und nicht an 0.0.0.0.

Starten Sie den Server bin/rails server -b 0.0.0.0 verwenden und das sollte es sortieren.

+0

Ich werde es tun! Jeder Server sollte die 0.0.0.0 in einer VM verwenden? Ich wusste nichts darüber ... –

+0

Nein, das ist nicht der sicherste Weg, es zu tun. 0.0.0.0 bedeutet nur, dass Sie auf eine beliebige Adresse hören. Die Änderung bedeutet, dass nur Anfragen von der VM und nicht von Ihrem Host-Computer beantwortet werden. Es ist gut für die Entwicklung, mach es nicht in der Produktion. –

+0

Ich habe das gleiche Problem festgestellt. Welche Empfehlungen haben Sie für die Einrichtung der Produktionsumgebung? Gibt es bestimmte IP-Schienen, an die man sich binden sollte? – helsont

9

auf einem bestimmten Port auszuführen:

rails server -b 0.0.0.0 -p 8520 
4

Verwendung:

rails s -b 0.0.0.0

oder

hinzufügen-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 

und arbeiten mit rails s

+0

Ihre zweite Lösung ist großartig, danke! Arbeiten mit Rails 5.0.1 – StringsOnFire

0

Sie einen Alias, sie setzen in ~/.bash_aliases
auf Ubuntu verwenden kann ich verwenden:
alias rs="rails server -b 0.0.0.0"

Sie haben das Terminal neu zu laden, bevor Sie es

0

verwenden können Wirklich schöne Erklärung hier gefunden: Rails 4.2.0.beta2 - Can't connect to LocalHost?

Ich hatte genau das gleiche Problem, mit der Ausnahme, dass mein PC Mac-Maschine ist . Ich habe diese vagrantfile verwendet, um es funktioniert (mit 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 

nach der VM zu müssen und läuft, ich bundle install in meinem Projekt Repo laufen würde und dann rails server -b 0.0.0.0. Wie bereits in verknüpften Antwort aus oben:

127.0.0.1:3000 erlaubt nur Verbindungen von dieser Adresse auf Port 3000, während 0.0.0.0:3000 Verbindungen von einem beliebigen Adresse an Port 3000 ermöglichen wird.

Da Rails 4.2 nur Verbindungen von localhost akzeptiert, können Sie nur von localhost auf den Server zugreifen (zB innerhalb der VM); Verbindungen von einem anderen Computer (z. B. VM-Host) funktionieren nicht.