谁能给我一个提示,如何通过命令行和 ruby 一起为工作目录服务?如果我可以有一些系统范围的配置(例如 mime-type) ,并简单地从每个目录启动它,那就太好了。
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
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
require 'webrick' include WEBrick s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd) trap("INT"){ s.shutdown } s.start
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:
.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
You can use the sinatra gem, though it doesn't do any directory listing for you, it serves files:
sinatra
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.
As Aaron Patterson tweeted it out today you can do:
ruby -run -e httpd . -p 5000
And you can set the bind address as well by adding -b 127.0.0.1
-b 127.0.0.1
Works with Ruby 1.9.2 and greater.
Use ruby gem Serve.
To install on your system, run gem install serve.
gem install serve
To serve a directory, simply cd to the directory and run serve.
serve
Default port is 4000. It can also serve things like ERB, HAML, Slim and SASS.
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.