could someone give me a hint, howto serve the current directory from command line with ruby? it would be great, if i can have some system wide configuration (e.g. mime-types
Simplest way possible (thanks Aaron Patterson/n0kada):
ruby -run -e httpd . -p 9090
Alternate, more complex way:
ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
Even the first command is hard to remember, so I just have this in my .bashrc:
function serve {
port="${1:-3000}"
ruby -run -e httpd . -p $port
}
It serves the current directory on port 3000 by default, but you can also specify the port:
~ $ cd tmp
~/tmp $ serve # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000 # ~/www served on port 5000
This may or may not be quite what you want but it's so cool that I just had to share it.
I've used this in the past to serve the file system. Perhaps you could modify it or just accept that it serves everything.
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}'
I found it here
Chris
python3 -m http.server
or if you don't want to use the default port 8000
python3 -m http.server 3333
or if you want to allow connections from localhost only
python3 -m http.server --bind 127.0.0.1
See the docs.
You can use the sinatra gem, though it doesn't do any directory listing for you, it serves files:
require 'sinatra' # gem
set :public_folder, '.'
then run that as a file, if in 1.8 add require 'rubygems' to the top first.
After running it then url's like
http://localhost:4567/file_name
should resolve to "./file_name" file.
http://localhost:4567 won't work however, since it doesn't "do" directory listings. See https://stackoverflow.com/a/12115019/32453 for a workaround there.
Use ruby gem Serve.
To install on your system, run gem install serve.
To serve a directory, simply cd to the directory and run serve.
Default port is 4000. It can also serve things like ERB, HAML, Slim and SASS.
I've never seen anything as compact as
python3 -m http.server
You can optionally add a port number to the end:
python3 -m http.server 9000
See https://docs.python.org/library/http.server.html