2015-01-06 17 views
45

Tôi có máy ảo Vagrant với Rails được cài đặt với ứng dụng mẫu. VM được cấu hình để chuyển tiếp cổng 3000 (của máy chủ Rails Webrick) tới cổng 3000 của máy chủ của tôi.Rails 4.2 Chuyển tiếp cổng máy chủ trên Vagrant không hoạt động

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

Mọi thứ được định cấu hình như trong nhiều ví dụ.

Nhưng, khi tôi cố gắng truy cập http://localhost:3000 không có gì xảy ra. Tôi cũng đã cố gắng chuyển tiếp đến các cổng ngẫu nhiên khác như 8081, 25600, mà không thành công. Thực hiện yêu cầu curl cũng không nhận được bất kỳ thứ gì (chỉ cần Thiết lập lại kết nối theo thông báo ngang hàng) và yêu cầu curl bên trong VM hoạt động hoàn hảo (như mong đợi).

Cả PC và máy ảo của tôi đều chạy Ubuntu 12.04. Tôi đang sử dụng Ruby 2.2.0 và Rails 4.2.0.

Điểm quan trọng là Apache hoạt động bình thường. Tôi chuyển tiếp cổng 80 đến cổng 8080 và mọi thứ hoạt động. Dường như vấn đề chỉ xảy ra với máy chủ Rails, ngay cả khi tôi sử dụng các cổng khác (ví dụ: rails server -p 4000)

Trả lời

87

Rails 4.2 bây giờ gắn với 127.0.0.1 theo mặc định và không 0.0.0.0.

Khởi động máy chủ bằng cách sử dụng bin/rails server -b 0.0.0.0 và điều đó sẽ sắp xếp.

+0

Tôi sẽ làm điều đó! Mọi máy chủ đều nên sử dụng 0.0.0.0 khi bên trong máy ảo? Tôi không biết về điều đó ... –

+0

Không, đây không phải là cách an toàn nhất để làm điều đó. 0.0.0.0 chỉ có nghĩa là lắng nghe bất kỳ địa chỉ nào. Thay đổi có nghĩa là nó sẽ chỉ đáp ứng các yêu cầu từ máy ảo chứ không phải máy chủ của bạn. Nó là tốt cho phát triển, không làm điều đó trong sản xuất. –

+0

Tôi đã gặp phải sự cố tương tự. Bạn có những khuyến nghị nào để thiết lập môi trường sản xuất? Có một đường dẫn IP cụ thể nên liên kết với? – helsont

9

Để chạy trên một cổng cụ thể:

rails server -b 0.0.0.0 -p 8520 
4

Sử dụng:

rails s -b 0.0.0.0

hay

Thêm-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 

và làm việc với rails s

+0

Giải pháp thứ hai của bạn là tuyệt vời, cảm ơn! Làm việc với Rails 5.0.1 – StringsOnFire

0

Bạn có thể sử dụng một bí danh, trên Ubuntu đặt nó trong ~/.bash_aliases
tôi sử dụng:
alias rs="rails server -b 0.0.0.0"

Bạn phải tải lại nhà ga trước khi bạn có thể sử dụng nó

0

Lời giải thích thực sự thú vị được tìm thấy tại đây: Rails 4.2.0.beta2 - Can't connect to LocalHost?

Tôi đã có cùng một vấn đề, ngoại trừ máy tính của tôi là máy Mac . Tôi đã sử dụng vagrantfile này để có được nó làm việc (với 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 

sau khi VM và chạy, tôi sẽ chạy bundle install trong repo dự án của tôi và sau đó rails server -b 0.0.0.0. Như đã chỉ ra trong câu trả lời liên kết ở trên:

127.0.0.1:3000 sẽ chỉ cho phép các kết nối từ địa chỉ đó trên cổng 3000, trong khi 0.0.0.0:3000 sẽ cho phép kết nối từ bất kỳ địa chỉ tại cổng 3000.

Vì Rails 4.2 chỉ chấp nhận kết nối từ máy chủ cục bộ theo mặc định, bạn chỉ có thể truy cập máy chủ từ máy chủ cục bộ (ví dụ: bên trong VM); kết nối từ một máy khác (ví dụ: máy chủ của VM) sẽ không hoạt động.

Các vấn đề liên quan