จะรันราง s -p80 บนพอร์ต 80 ได้อย่างไร?


88

โดยค่าเริ่มต้น,

 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 เพื่อติดตั้งทับทิมและราง ดูเหมือนว่า 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
iain

2
ถ้าอย่างฉันคุณใช้ rbenv มากกว่า rvm ปลั๊กอิน rbenv นี้จะทำหน้าที่เทียบเท่า: github.com/dcarley/rbenv-sudo
micapam

สิ่งนี้จะมีความเสี่ยงมากขึ้นหรือไม่หากมีช่องโหว่ด้านความปลอดภัยใน RVM เนื่องจากทำงานเป็นรูท
Kevin Chen

2
@ เควินเฉิน: ไม่ได้อยู่ใน RVM แต่ฉันจะกังวลเกี่ยวกับการรัน Rails ในฐานะรูท ในการใช้งานจริงคุณจะใช้ Apache หรือ Nginx ซึ่งต้องการสิทธิ์รูทเพื่ออ้างสิทธิ์พอร์ต แต่ทำงานในฐานะผู้ใช้พิเศษ ทางออกของฉันมีไว้เพื่อทดสอบสิ่งต่าง ๆ ในการพัฒนา
iain

ฉันเบื่อสิ่งนี้ แต่ได้รับการ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

อย่างไรก็ตามโปรดอย่าลืมปล่อยพอร์ตนี้จาก Apache หรือบริการอื่น ๆ ที่ใช้พอร์ตนี้ตามปกติ นอกจากนี้ฉันไม่แน่ใจว่าการให้สิทธิ์ sudo กับ RVM อาจมีปัญหาด้านความปลอดภัยหรือไม่?


สิ่งนี้จะใช้สองพอร์ตและจะไม่อนุญาตให้เรียกใช้อินสแตนซ์ทับทิมอื่นบนพอร์ต 3000
Konstantin

คุณจะย้อนกลับได้อย่างไร? มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันซึ่งดีมาก แต่ถ้าฉันต้องการยกเลิกการเปลี่ยนเส้นทางล่ะ ขอบคุณ.
robins35

จำเป็นต้องรีเซ็ตตารางเส้นทาง IP เป็นค่าเริ่มต้น
Dinesh Saini

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
bentrevor

8

กำลังจะแนะนำ

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

แต่ยังคงพยายามใช้ global gemset ไม่ใช่ project gemset จาก RVM ดังนั้น...

  1. ตรวจสอบให้แน่ใจว่า sshd ทำงานบน Mac ของคุณ (System Prefs => Sharing => ตรวจสอบการเข้าสู่ระบบระยะไกล)
  2. ตรวจสอบให้แน่ใจว่าrails sกำลังทำงานบนพอร์ต 3000 ในฐานะผู้ใช้ที่ไม่ใช่รูทของคุณ
  3. เปิดอาคารผู้โดยสารแห่งใหม่แล ...

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

(BTW ลดรายการที่ซ้ำกันเป็นเอกพจน์ในบรรทัดด้านบนฉันไม่สามารถเข้าใจได้ว่าจะหลบหนีได้อย่างไร)

อันดับแรกPassword:คือrootผู้ใช้ของคุณอย่างที่สองคือรหัสผ่านสำหรับใครก็ตามที่whoamiส่งคืน

แม้ว่าคุณอาจต้องการติดตั้ง Phusion Passenger และตั้งค่าภายใต้ Apache ในพื้นที่ของคุณ เว้นแต่คุณจะพยายามสาธิตบางอย่างอย่างรวดเร็วจริง ๆ และนี่ไม่ใช่วิธีแก้ปัญหาถาวรแน่นอน


ตรวจสอบให้แน่ใจว่าคุณใช้/usr/bin/which railsในกรณีที่รางเป็นนามแฝง
david_adler

1

หากคุณใช้ RVM และคุณได้ทำการตั้งค่าเริ่มต้นคุณไม่ควรใช้sudoไฟล์.

แค่:

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

อย่างไรก็ตาม 80 เป็นพอร์ตที่มีสิทธิพิเศษดังนั้นคุณต้องรันในฐานะรูทและคุณจะต้องปฏิบัติตามคำแนะนำสำหรับการติดตั้ง RVM แบบหลายผู้ใช้


จำเป็นต้องรูทสำหรับพอร์ตที่มีสิทธิพิเศษ
cfeduke

@cfeduke - โอ้! ใช่คุณเป็น
Swanand

@marimaf - เอกสารนี้ครบกำหนดแล้ว นี่คือลิงค์ใหม่: rvm.io/rvm/install
Swanand

ขอบคุณสิ่งนี้ช่วยในการเข้าถึง MAC VM จากโฮสต์พีซีเพื่อทดสอบแอปรางที่ฉันใช้งานอยู่ ในกรณีนั้นฉันต้องใช้ตัวเลือก -b (ผูก) กับที่อยู่ IP ของ vm
Tom T

-1

คุณสามารถเริ่มเซิร์ฟเวอร์บนพอร์ต 80

rails s -p 80

หากพอร์ต 80 ไม่ผูก (กระบวนการอื่นไม่ได้ใช้กับพอร์ต 80)


1
พอร์ตที่ต่ำกว่า 1024 ต้องการการเข้าถึงรูทและคุณไม่สามารถเรียกใช้แอปพลิเคชันได้จนกว่าคุณจะไม่ได้ตั้งค่ารางผ่านรูท URL ฉันได้ติดตั้งและทดสอบแล้ว
Dinesh Saini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.