80 पोर्ट पर रेल-एस 80 कैसे चलाएं?


87

डिफ़ॉल्ट रूप से,

 rails s #running on 3000 port

अब मैं इसे पोर्ट 80 पर चलाना चाहता हूं। इसलिए मैंने कोशिश की:

 sudo rails -s -p80

लेकिन इसने एक त्रुटि फेंक दी:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found

मैं रूबी और रेल स्थापित करने के लिए rvm का उपयोग करता था। ऐसा लगता है कि आरवीएम उपयोगकर्ता निर्दिष्ट है। क्या यह जड़ में रेल खोजने में सक्षम नहीं है?

मैंने भी नीचे दिए गए कोड की कोशिश की:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ which rails
/home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails
mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails s -p80

जवाबों:


212
rvmsudo rails server -p 80

@pinouchon यह काम करता है क्योंकि rvmsudosudo प्लस लोडिंग rvm को sudo कहते हैं।
इयान

2
अगर मेरी तरह आप rvm के बजाय rbenv का उपयोग कर रहे हैं, तो यह rbenv प्लगइन बराबर करेगा: github.com/dcarley/rbenv-sudo
micapam

अगर यह आरवीएम में एक सुरक्षा छेद है, तो यह एक जोखिम का अधिक होगा, यह देखते हुए कि यह रूट के रूप में चल रहा है?
केविन चेन

2
@ क्वीन चेन: आरवीएम में नहीं, लेकिन मैं रूट के रूप में रन के बारे में चिंतित हूं। उत्पादन में आप Apache या Nginx का उपयोग करेंगे, जिसे पोर्ट का दावा करने के लिए रूट अनुमतियों की आवश्यकता होती है, लेकिन एक विशेष उपयोगकर्ता के रूप में चलता है। मेरा समाधान सिर्फ विकास में चीजों के परीक्षण के लिए है।
आईएन

मैंने इसे थका दिया, लेकिन यह socket.rb:206:in बाँध रहा है : पहले से उपयोग में पता - बाँध (2) 0.0.0.0:80 (Errno :: EADDRINUSE) के लिए `त्रुटि
r15

23

नीचे कमांड का उपयोग करके पोर्ट 80 से 3000 तक के अनुरोध को आगे भेजें:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

एक अन्य विकल्प है:

rvmsudo rails server -p 80

हालाँकि कृपया इस पोर्ट को अपाचे या अन्य सेवाओं से मुक्त करने के लिए याद रखें जो इस पोर्ट को सामान्य रूप से खपत करते हैं। इसके अलावा, मुझे यकीन नहीं है कि आरवीएम को सुडोल अनुमति देना कोई सुरक्षा मुद्दा हो सकता है या नहीं?


यह दो बंदरगाहों की खपत होगी, और यह बंदरगाह 3000 पर एक और गहरे लाल रंग का उदाहरण चलाने के लिए अनुमति नहीं दी जाएगी
Konstantin

आप इसे कैसे उल्टा करते हैं? यह मेरे लिए पूरी तरह से काम करता है, जो महान है, लेकिन क्या होगा अगर मैं रीडायरेक्ट को पूर्ववत करना चाहता हूं? धन्यवाद।
रोबिन्स 35

डिफ़ॉल्ट पर आईपी मार्ग तालिका को रीसेट करने की आवश्यकता है
दिनेश सैनी

1
आप के -Iसाथ बदलकर इस कमांड को उल्टा कर सकते हैं -D, इसलिए sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000। यहाँ उत्तर अधिक विवरण में दिए गए हैं: serverfault.com/questions/159544/undoing-port-forwarding
बेंट्रीवर

8

सुझाव देने जा रहा था

rails=`which rails` ; sudo $rails server -p 80

लेकिन यह अभी भी आरवीएम से वैश्विक रत्न और प्रोजेक्ट रत्न का उपयोग करने की कोशिश करता है। इसलिए...

  1. सुनिश्चित करें कि आपके मैक पर sshd चल रहा है। (सिस्टम प्रीफ़्स => शेयरिंग => रिमोट लॉगिन चेक किया गया)
  2. सुनिश्चित करें कि rails sआपके गैर-रूट उपयोगकर्ता के रूप में पोर्ट 3000 पर चल रहा है
  3. एक नया टर्मिनल खोलें और ...

    me=``whoami``; sudo ssh -L 80:127.0.0.1:3000 -l $me -N localhost

(BTW उपर्युक्त पंक्ति में एकल लोगों के डुप्लिकेट को कम करते हैं, मैं यह पता नहीं लगा सकता कि यह यहां कैसे ठीक से बच सकता है।)

पहला Password:आपका rootउपयोगकर्ता है, दूसरा वह है जिसके लिए पासवर्ड whoamiहै।

यद्यपि आप शायद फ़्यूज़न पैसेंजर को स्थापित करना चाहते हैं और इसे अपने स्थानीय अपाचे के तहत स्थापित करना चाहते हैं। जब तक आप कुछ वास्तविक वास्तविक प्रदर्शन करने की कोशिश कर रहे हैं और यह निश्चित रूप से एक स्थायी समाधान नहीं है।


सुनिश्चित करें कि आप /usr/bin/which railsकेस रेल का उपयोग करते हैं ,
अलियास है

1

यदि आप आरवीएम का उपयोग कर रहे हैं, और आपने डिफ़ॉल्ट सेटअप किया है, तो आपको उपयोग नहीं करना चाहिए sudo

बस:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ rails server -p 80

हालांकि 80 एक विशेषाधिकार प्राप्त बंदरगाह है, इसलिए आपको रूट के रूप में चलाने की आवश्यकता है, और आपके पास आरवीएम के मल्टी-यूजर इंस्टॉलेशन के निर्देशों का पालन करना होगा ।


जड़ों को विशेषाधिकार प्राप्त बंदरगाहों के लिए आवश्यक है।
cfeduke

@cfeduke - ओह! आप सही हैं।
स्वानंद

@marimaf - समय के साथ प्रलेखन परिपक्व हो गया है। यहाँ नई लिंक है: rvm.io/rvm/install
स्वानंद

धन्यवाद, यह एक पीसी होस्ट से मैक वीएम तक पहुँचने में मदद करता है एक रेल ऐप का परीक्षण करने के लिए जो मैं काम कर रहा था। उस मामले में हालांकि मुझे vm के आईपी पते के साथ -b (bind) विकल्प का उपयोग करना था।
टॉम टी

-1

आप पोर्ट 80 पर सर्वर शुरू कर सकते हैं

rails s -p 80

यदि पोर्ट 80 बाइंड नहीं करता है (अन्य प्रक्रिया पोर्ट 80 का उपयोग नहीं कर रहा है)।


1
1024 से नीचे के पोर्ट को रूट एक्सेस की आवश्यकता होती है और जब तक आप रूट URL के माध्यम से रेल सेटअप नहीं करते हैं तब तक आप एप्लिकेशन नहीं चला सकते हैं। मैंने इसे लागू और परीक्षण किया है।
दिनेश सैनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.