ให้บริการไดเรกทอรีปัจจุบันจากบรรทัดคำสั่ง


95

ใครช่วยให้คำแนะนำวิธีการให้บริการไดเรกทอรีปัจจุบันจากบรรทัดคำสั่งด้วยทับทิม มันจะดีมากถ้าฉันสามารถกำหนดค่าทั้งระบบได้ (เช่นประเภทละครใบ้) และเปิดใช้งานจากทุกไดเร็กทอรี

คำตอบ:


205

วิธีที่ง่ายที่สุดที่เป็นไปได้ (ขอบคุณAaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

วิธีอื่นที่ซับซ้อนกว่า:

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"

แม้แต่คำสั่งแรกก็ยากที่จะจำดังนั้นฉันจึงมีสิ่งนี้ใน.bashrc:

function serve {
  port="${1:-3000}"
  ruby -run -e httpd . -p $port
}

ทำหน้าที่ไดเร็กทอรีปัจจุบันบนพอร์ต3000ตามค่าเริ่มต้น แต่คุณสามารถระบุพอร์ตได้ด้วย:

~ $ cd tmp
~/tmp $ serve      # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000   # ~/www served on port 5000

หากคุณใช้ windows คุณสามารถเพิ่มสิ่งนี้ลงใน cmd หรือ powershell เป็นฟังก์ชันได้หรือไม่?
Caleb

@ แดเนียล - เมื่อฉันเรียกใช้ซับเดียวของคุณบน Mac ของฉัน ฉันได้รับข้อความแสดงข้อผิดพลาดนี้: INT ค่าคงที่ที่ไม่ได้กำหนดค่าเริ่มต้น (NameError) คุณใช้งานบนแพลตฟอร์มอื่นหรือไม่? คุณรู้ไหมว่าฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร? แต่ถ้าฉันเขียนลงในไฟล์ว่า myserver.rb แล้วทำ "ruby myserver.rb" ก็ใช้ได้ดี
Tony Jiang

@ TonyJiang ฉันกำลังทำงานบน Mac ด้วย ลองใช้กับ Ruby 1.8.7, 1.9.3 และ 2.0.0 แล้วทุกอย่างก็ใช้ได้ แปลก.
Daniel Perez Alvarez

7
เพื่อ demistify ruby -run -e httpd . -p 9090ดูที่ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html มันกำลังเรียกใช้เมธอด httpd จากunไลบรารีมาตรฐานทับทิมดังนั้นจึงต้องใช้ un.
Gee-Bee

1
@Deviljho ถ้าคุณกำลังทำงานบน Mac หรือ Linux เพียงเพิ่มเครื่องหมายในตอนท้ายของคำสั่งที่จะส่งไปยังพื้นหลัง: ถ้าคุณต้องการที่จะนำมันกลับไปเบื้องหน้าการใช้งานruby -run -e httpd . -p 9090 & fg
Daniel Perez Alvarez

22

ไม่เคยเห็นอะไรกะทัดรัดเท่า

python3 -m http.server

คุณสามารถเลือกที่จะเพิ่มหมายเลขพอร์ตต่อท้าย:

python3 -m http.server 9000

ดูhttps://docs.python.org/library/http.server.html


มีรายการโซลูชันขนาดกะทัดรัดที่นี่: gist.github.com/willurd/5720255 :)
เฟลิกซ์



4

ใช้ทับทิมอัญมณีเสิร์ฟ

gem install serveการติดตั้งในระบบของคุณทำงาน

ที่จะให้บริการไดเรกทอรีเพียง cd serveไปยังไดเรกทอรีและเรียกใช้

พอร์ตเริ่มต้นคือ 4000 นอกจากนี้ยังสามารถรองรับสิ่งต่างๆเช่น ERB, HAML, Slim และ SASS


3

เว็บเซิร์ฟเวอร์ใน 1 บรรทัด


นี่อาจใช่หรือไม่ใช่สิ่งที่คุณต้องการ แต่มันเจ๋งมากที่ฉันต้องแบ่งปัน

ฉันเคยใช้สิ่งนี้ในอดีตเพื่อให้บริการระบบไฟล์ บางทีคุณอาจปรับเปลี่ยนหรือเพียงแค่ยอมรับว่าให้บริการทุกอย่าง

ruby -rsocket -e 's=TCPServer.new(5**5);loop{_=s.accept;_<<"HTTP/1.0 200 OK\r\n\r\n#{File.read(_.gets.split[1])rescue nil}";_.close}'

ฉันพบมันที่นี่

คริส


3

คุณสามารถใช้sinatraอัญมณีแม้ว่าจะไม่ได้ทำรายการไดเร็กทอรีใด ๆ ให้คุณ แต่ก็ให้บริการไฟล์:

require 'sinatra' # gem
set :public_folder, '.'

จากนั้นเรียกใช้ไฟล์นั้นเป็นไฟล์หากใน 1.8 เพิ่มต้องมี 'ทับทิม' ที่ด้านบนก่อน

หลังจากเรียกใช้แล้ว url จะชอบ

http: // localhost: 4567 / file_name

ควรแก้ไขเป็นไฟล์ "./file_name"

http: // localhost: 4567จะไม่ทำงานเนื่องจากไม่ "ทำ" รายการไดเรกทอรี ดูhttps://stackoverflow.com/a/12115019/32453สำหรับวิธีแก้ปัญหาที่นั่น


ติดตั้ง sinatra gem $ gem ติดตั้ง sinatra จากนั้นบันทึกข้อความนี้ไปที่ somefile.rb แล้วเรียกใช้
rogerdpack

ไม่ฉันหมายถึงซินาตร้าให้ข้อผิดพลาดกับฉัน: ซินาตร้าไม่รู้เรื่องนี้
eveevans

@eveevans เพิ่งสังเกตเห็นความคิดเห็นของคุณ [ฮ่า ๆ ขอโทษ] อัปเดตแล้ว
rogerdpack

1
python3 -m http.server

หรือหากคุณไม่ต้องการใช้พอร์ตเริ่มต้น 8000

python3 -m http.server 3333

หรือหากคุณต้องการอนุญาตการเชื่อมต่อจาก localhost เท่านั้น

python3 -m http.server --bind 127.0.0.1

ดูเอกสาร

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