如何编写一个小型的Ruby Web服务器?

4
我有一个 Ruby 脚本,它还需要服务一些静态文件(例如 index.html、CSS 和 JS 目录)。编写一个小型内联 Web 服务器来提供这些文件的最佳方法是什么?
解决方案:
require 'webrick'
web_server = WEBrick::HTTPServer.new(:Port => 3000, :DocumentRoot => Dir.pwd + '/web')
trap 'INT' { web_server.shutdown }
web_server.start

或者将以下代码添加到您的.bash_profile中,以便在任何目录中轻松提供文件服务:

alias serve="ruby -rwebrick -e\"s = WEBrick::HTTPServer.new(:Port => 3000, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start\""

WEBrick 有什么问题吗? - Andrew Marshall
对于1.9.3版本,请使用trap('INT'),否则会出现语法错误。 - wpp
4个回答

10
您可以使用最简单的Ruby HTTP服务器:
ruby -run -e httpd . -p 5000

它将在5000端口从运行目录提供内容。


2
如果你正在寻找一些纯粹的 Ruby 语言编写的简单服务器,那么 WEBrick 是一个不错的选择。因为它是纯 Ruby 编写的,所以速度不会很快。 Mongrel 部分使用了 C 和 Ruby 语言实现,比 WEBrick 更具性能优势。(如果安装了 Mongrel,Ruby on Rails 开发模式将优先使用 Mongrel)
如果你想让你的服务器比 WEBrick 或 Mongrel 更好地扩展,那么 thin 可能是更好的选择 -- 它在 EventMachine 之上将 Mongrel 粘合在一起,可以比其他简单系统更进一步扩展。
没有什么能够完全取代像 nginx 这样运行完整的 Web 服务器,但将其集成到您的应用程序中对于您和用户来说需要更多的工作。

1
如@sarnold所提到的,Thin是一个很好的服务器,Rack将会优先使用Thin。如果你已经安装了Rack gem,下面是一种简单的方法: rackup -b "use Rack::Static, :index => 'index.html'; run Rack::File.new('.')" 如果当前目录中没有'index.html'文件,则会列出目录内容。

很好!我更喜欢这个。 - Andrew

0

你看过Sinatra吗?

这可能是你正在寻找的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接