通过命令行提供当前目录


94

有人可以给我一个提示,如何使用ruby从命令行提供当前目录吗?如果我可以进行一些系统范围的配置(例如mime-types),然后从每个目录中启动它,那将是很好的。

Answers:


204

最简单的方法(感谢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

如果您在Windows上,是否可以将其作为功能添加到cmd或powershell中?
Caleb

@Daniel-当我在Mac上运行您的一根衬垫时。我收到此错误消息:未初始化的常量INT(NameError)。您是否在其他平台上运行它?你知道我能避免这种情况吗?但是,如果我将其写入文件说myserver.rb,然后执行“ ruby​​ myserver.rb”,则可以正常工作。
东尼·姜

@TonyJiang我也在Mac上运行。在Ruby 1.8.7、1.9.3和2.0.0上进行了尝试,它们都可以工作。奇怪的。
Daniel Perez Alvarez 2013年

7
为了消除混淆,请ruby -run -e httpd . -p 9090查看ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html。它从unruby标准库执行httpd方法,因此需要un。
Gee-Bee 2014年

1
@Deviljho(如果您在Mac或Linux上运行),只需在命令末尾添加一个&符,即可将其发送到后台:ruby -run -e httpd . -p 9090 & 如果要将其放回前台,请使用fg
丹尼尔·佩雷斯·阿尔瓦雷斯



5
require 'webrick'
include WEBrick

s = HTTPServer.new(:Port => 9090,  :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start

4

使用红宝石宝石即成

要在您的系统上安装,请运行gem install serve

要提供目录,只需cd到目录并运行serve

默认端口为4000。它也可以提供ERB,HAML,Slim和SASS之类的服务。


3

1行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}'

我在这里找到

克里斯


3

您可以使用sinatragem,尽管它不会为您提供任何目录列表,但可以提供文件:

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,了解解决方法。


安装sinatra gem $ gem安装sinatra,然后将此文本保存到somefile.rb,然后运行它
rogerdpack 2012年

不,我的意思是,Sinatra给了我错误:Sinatra不知道这个细节。
eveevans

@eveevans不知何故刚刚注意到您的评论,[抱歉,现在更新。
rogerdpack's

1
python3 -m http.server

或者如果您不想使用默认端口8000

python3 -m http.server 3333

或者如果您只想允许来自本地主机的连接

python3 -m http.server --bind 127.0.0.1

请参阅文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.