【发布时间】:2011-03-07 17:00:22
【问题描述】:
谁能给我一个提示,如何使用 ruby 从命令行为当前目录提供服务?如果我可以有一些系统范围的配置(例如 mime-types)并简单地从每个目录启动它,那就太好了。
【问题讨论】:
标签: ruby command-line
谁能给我一个提示,如何使用 ruby 从命令行为当前目录提供服务?如果我可以有一些系统范围的配置(例如 mime-types)并简单地从每个目录启动它,那就太好了。
【问题讨论】:
标签: ruby command-line
最简单的方法(感谢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
【讨论】:
ruby -run -e httpd . -p 9090 的迷雾,请查看 ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html。它正在执行来自un ruby 标准库的 httpd 方法,因此需要 un.
ruby -run -e httpd . -p 9090 & 如果您想将其带回前台,使用fg。
作为Aaron Patterson tweeted it out 今天你可以这样做:
ruby -run -e httpd . -p 5000
您也可以通过添加-b 127.0.0.1来设置绑定地址
适用于 Ruby 1.9.2 及更高版本。
【讨论】:
我从未见过像
这样紧凑的东西python3 -m http.server
您可以选择在末尾添加端口号:
python3 -m http.server 9000
【讨论】:
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
【讨论】:
使用 ruby gem Serve.
要在您的系统上安装,请运行gem install serve。
要提供目录,只需 cd 到目录并运行 serve。
默认端口是 4000。它还可以提供 ERB、HAML、Slim 和 SASS 等服务。
【讨论】:
这可能是也可能不是你想要的,但它太酷了,我不得不分享它。
我过去曾使用它来为文件系统提供服务。也许你可以修改它,或者只是接受它服务于一切。
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
克里斯
【讨论】:
您可以使用sinatra gem,虽然它不会为您列出任何目录,但它会提供文件:
require 'sinatra' # gem
set :public_folder, '.'
然后将其作为文件运行,如果在 1.8 中首先将 require 'rubygems' 添加到顶部。
运行它之后,url就像
http://localhost:4567/file_name
应该解析为“./file_name”文件。
http://localhost:4567 但是不会起作用,因为它不会“做”目录列表。请参阅 https://stackoverflow.com/a/12115019/32453 以获取解决方法。
【讨论】:
python3 -m http.server
或者如果您不想使用默认端口 8000
python3 -m http.server 3333
或者如果您只想允许来自本地主机的连接
python3 -m http.server --bind 127.0.0.1
请参阅docs。
【讨论】: