J'ai un vagabond VM avec Rails installé avec un exemple d'application. VM est configuré pour transférer le port 3000 (du serveur Rails Webrick) vers le port de mon hôte 3000.
config.vm.network "forwarded_port", guest: 3000, Host: 3000
Tout est configuré comme dans beaucoup d'exemples.
Mais lorsque j'essaie d'accéder à http://localhost:3000
, rien ne se passe. J'ai également essayé de transférer vers d'autres ports aléatoires tels que 8081, 25600, sans succès. Faire une requête curl n'obtient également rien (juste un Connection réinitialisé par le message peer), et une requête curl à l'intérieur de VM fonctionne parfaitement (comme prévu).
Mon PC et ma VM utilisent Ubuntu 12.04. J'utilise Ruby 2.2.0 et Rails 4.2.0.
Un point important est qu'Apache fonctionne normalement. J'ai transféré le port 80 au port 8080 et tout fonctionne. Il semble que le problème concerne uniquement le serveur Rails, même si j'utilise d'autres ports (Rails server -p 4000
, par exemple)
Rails 4.2 se lie maintenant à 127.0.0.1
par défaut et non pas 0.0.0.0
.
Démarrez le serveur en utilisant bin/Rails server -b 0.0.0.0
et cela devrait trier.
Pour fonctionner sur un port spécifique:
Rails server -b 0.0.0.0 -p 8520
Utilisation :
Rails s -b 0.0.0.0
ou
Ajouter à 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
et travailler avec Rails s
Vraiment belle explication trouvée ici: Rails 4.2.0.beta2 - Impossible de se connecter à LocalHost?
J'ai eu exactement le même problème, à l'exception du fait que mon PC est une machine Mac. J'ai utilisé ce fichier vagrant pour le faire fonctionner (avec 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
après avoir installé VM, je lancerais bundle install
dans mon dépôt de projet, puis Rails server -b 0.0.0.0
. Comme indiqué dans la réponse liée ci-dessus:
127.0.0.1:3000 autorisera uniquement les connexions à partir de cette adresse sur le port 3000, tandis que 0.0.0.0:3000 autorisera les connexions à partir de toute adresse située à. port 3000.
Étant donné que Rails 4.2 accepte uniquement les connexions à partir de localhost par défaut, vous pouvez uniquement accéder au serveur à partir de localhost (par exemple, à l'intérieur de la machine virtuelle); les connexions depuis une autre machine (par exemple, l'hôte de la machine virtuelle) ne fonctionneront pas.
Vous pouvez utiliser un alias, sur Ubuntu, mettez-le dans ~/.bash_aliases
J'utilise:alias rs="Rails server -b 0.0.0.0"
Vous devez recharger le terminal avant de pouvoir l'utiliser