从命令行提供当前目录

时间:2010-06-24 08:45:40

标签: ruby command-line

有人可以给我一个提示,如何使用ruby从命令行提供当前目录?如果我可以有一些系统范围的配置(例如mime-types)并且只是从每个目录启动它,那就太棒了。

8 个答案:

答案 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)

Web服务器一行


这可能或者可能不是你想要的,但它太酷了,我只需要分享它。

我过去曾使用它来为文件系统提供服务。也许你可以修改它或只是接受它服务于一切。

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