Câu trả lời:
Cách đơn giản nhất có thể (cảm ơn Aaron Patterson / n0kada):
ruby -run -e httpd . -p 9090
Cách thay thế, phức tạp hơn:
ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
Ngay cả lệnh đầu tiên cũng khó nhớ, vì vậy tôi chỉ có điều này trong .bashrc
:
function serve {
port="${1:-3000}"
ruby -run -e httpd . -p $port
}
Nó phục vụ thư mục hiện tại trên cổng 3000 theo mặc định, nhưng bạn cũng có thể chỉ định cổng:
~ $ cd tmp
~/tmp $ serve # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000 # ~/www served on port 5000
ruby -run -e httpd . -p 9090
hãy xem ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Nó thực thi phương thức httpd từ un
thư viện chuẩn ruby, do đó yêu cầu un.
ruby -run -e httpd . -p 9090 &
Nếu bạn muốn đưa nó trở lại nền trước, hãy sử dụng fg
.
Tôi chưa bao giờ thấy bất cứ thứ gì nhỏ gọn như
python3 -m http.server
Bạn có thể tùy chọn thêm số cổng vào cuối:
python3 -m http.server 9000
Như Aaron Patterson đã tweet nó hôm nay, bạn có thể làm:
ruby -run -e httpd . -p 5000
Và bạn cũng có thể đặt địa chỉ liên kết bằng cách thêm -b 127.0.0.1
Hoạt động với Ruby 1.9.2 trở lên.
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
Điều này có thể có hoặc không hoàn toàn như những gì bạn muốn nhưng nó rất tuyệt nên tôi phải chia sẻ nó.
Tôi đã sử dụng điều này trước đây để phục vụ hệ thống tệp. Có lẽ bạn có thể sửa đổi nó hoặc chỉ chấp nhận rằng nó phục vụ mọi thứ.
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}'
Tôi tìm thấy nó ở đây
Chris
Bạn có thể sử dụng sinatra
gem, mặc dù nó không thực hiện bất kỳ danh sách thư mục nào cho bạn, nó phục vụ các tệp:
require 'sinatra' # gem
set :public_folder, '.'
sau đó chạy tệp đó dưới dạng tệp, nếu trong 1.8, thêm yêu cầu 'rubygems' lên trên cùng trước.
Sau khi chạy nó thì url giống như
http: // localhost: 4567 / file_name
sẽ giải quyết thành tệp "./file_name".
Tuy nhiên, http: // localhost: 4567 sẽ không hoạt động vì nó không "làm" danh sách thư mục. Xem https://stackoverflow.com/a/12115019/32453 để biết cách giải quyết khác tại đó.