2015-01-06 8 views
45

काम नहीं करता है मेरे पास एक नमूना ऐप के साथ स्थापित रेल के साथ एक वग्रेंट वीएम है। वीएम को मेरे मेजबान 3000 पोर्ट में पोर्ट 3000 (रेल वेब्रिक सर्वर) को अग्रेषित करने के लिए कॉन्फ़िगर किया गया है।रेल्स 4.2 वग्रेंट पर सर्वर पोर्ट अग्रेषण

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

सब कुछ कई उदाहरणों में देखा गया है जैसा कि कॉन्फ़िगर किया गया है।

लेकिन, जब मैं http://localhost:3000 तक पहुंचने का प्रयास करता हूं तो कुछ भी नहीं होता है। मैंने सफलता के बिना 8081, 25600 जैसे अन्य यादृच्छिक बंदरगाहों को आगे बढ़ाने की भी कोशिश की है। एक कर्ल अनुरोध करने से कुछ भी नहीं मिलता है (केवल सहकर्मी संदेश द्वारा कनेक्शन रीसेट), और वीएम के अंदर एक कर्ल अनुरोध पूरी तरह से (अपेक्षित के रूप में) काम करता है।

मेरे पीसी और मेरे वीएम दोनों उबंटू 12.04 चलाते हैं। मैं रूबी 2.2.0 और रेल 4.2.0 का उपयोग कर रहा हूँ।

एक महत्वपूर्ण बात यह है कि अपाचे सामान्य रूप से काम करता है। मैंने पोर्ट 80 को बंदरगाह 8080 पर अग्रेषित किया और सबकुछ काम करता है। ऐसा लगता है कि समस्या सिर्फ रेल सर्वर के साथ है, भले ही जब मैं अन्य बंदरगाहों का उपयोग करें (rails server -p 4000, उदाहरण के लिए)

उत्तर

87

रेल 4.2 अब 127.0.0.1 डिफ़ॉल्ट रूप से और न 0.0.0.0 को बांधता है।

bin/rails server -b 0.0.0.0 का उपयोग कर सर्वर प्रारंभ करें और इसे सॉर्ट करना चाहिए।

+0

मैं इसे करने वाला हूं! वीएम के अंदर प्रत्येक सर्वर को 0.0.0.0 का उपयोग करना चाहिए? मुझे इसके बारे में पता नहीं था ... –

+0

नहीं, यह करने का सबसे सुरक्षित तरीका नहीं है। 0.0.0.0 बस किसी भी पते के लिए सुनो। परिवर्तन का मतलब है कि यह केवल वीएम से अनुरोधों का जवाब देगा, न कि आपकी मेजबान मशीन। विकास के लिए यह ठीक है, इसे उत्पादन में मत करो। –

+0

मुझे एक ही समस्या का सामना करना पड़ा है। उत्पादन वातावरण की स्थापना के लिए आपके पास क्या सिफारिशें हैं? क्या कोई विशिष्ट आईपी रेल बांधना चाहिए? – helsont

9

एक विशिष्ट पोर्ट पर चलाने के लिए:

rails server -b 0.0.0.0 -p 8520 
4

उपयोग:

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

+0

आपका दूसरा समाधान बहुत अच्छा है, धन्यवाद! रेल 5.0.1 के साथ काम करना – StringsOnFire

0

के साथ काम आप एक उपनाम का उपयोग कर सकते, Ubuntu पर यह ~/.bash_aliases
में डाल मैं का उपयोग करें:
alias rs="rails server -b 0.0.0.0"

आप टर्मिनल को फिर से लोड करने के लिए इससे पहले कि आप

0

उपयोग कर सकते हैं वास्तव में यहां अच्छा स्पष्टीकरण मिला: Rails 4.2.0.beta2 - Can't connect to LocalHost?

मुझे बिल्कुल वही समस्या थी, अपवाद के साथ कि मेरा पीसी मैक मशीन है । मैं इस vagrantfile का उपयोग किया है यह वीएम ऊपर वाले और चल रहा है, मैं अपने प्रोजेक्ट रेपो में bundle install चलाने और फिर rails server -b 0.0.0.0 के बाद (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 

मिलता है। , बंदरगाह 3000 पर उस पते से

127.0.0.1:3000 केवल अनुमति देगा कनेक्शन जबकि 0.0.0.0:3000 पोर्ट 3000 पर किसी भी पते से कनेक्शन की अनुमति देगा: के रूप में ऊपर लिंक जवाब में बताया।

चूंकि रेल 4.2 केवल स्थानीयहोस्ट से डिफ़ॉल्ट रूप से कनेक्शन स्वीकार करता है, आप केवल स्थानीयहोस्ट से सर्वर तक पहुंच सकते हैं (उदाहरण के लिए वीएम के अंदर); किसी अन्य मशीन से कनेक्शन (उदाहरण के लिए वीएम होस्ट) काम नहीं करेगा।

संबंधित मुद्दे