有人可以给我一个提示,如何使用ruby从命令行提供当前目录?如果我可以有一些系统范围的配置(例如mime-types)并且只是从每个目录启动它,那就太棒了。
答案 0 :(得分:195)
最简单的方式(感谢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
答案 1 :(得分:21)
我从来没有见过像
那样紧凑的东西python -m SimpleHTTPServer
对于Ruby,Chris的回答在Google上出现了好几次。
答案 2 :(得分:21)
今天Aaron Patterson tweeted it out你可以这样做:
ruby -run -e httpd . -p 5000
您还可以通过添加-b 127.0.0.1
适用于Ruby 1.9.2及更高版本。
答案 3 :(得分:5)
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
答案 4 :(得分:4)
使用ruby gem Serve。
要在您的系统上安装,请运行gem install serve
。
要提供目录,只需cd到目录并运行serve
。
默认端口为4000.它还可以提供ERB,HAML,Slim和SASS等功能。
答案 5 :(得分:3)
这可能或者可能不是你想要的,但它太酷了,我只需要分享它。
我过去曾使用它来为文件系统提供服务。也许你可以修改它或只是接受它服务于一切。
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}'
我发现它here
克里斯
答案 6 :(得分:3)
你可以使用sinatra
gem,虽然它没有为你做任何目录列表,它提供文件:
require 'sinatra' # gem
set :public_folder, '.'
然后将其作为文件运行,如果在1.8中,首先要求'rubygems'到顶部。
运行之后,网址就像
http://localhost:4567/file_name
应解析为“./file_name”文件。
然而,http://localhost:4567将无效,因为它不会“执行”目录列表。有关解决方法,请参阅https://stackoverflow.com/a/12115019/32453。
答案 7 :(得分:1)
python3 -m http.server
或者如果您不想使用默认端口8000
python3 -m http.server 3333
或者如果您只想允许来自localhost的连接
python3 -m http.server --bind 127.0.0.1
请参阅docs。