Ruby Rack怎么安装一个简单的web服务器,使得该服务器将index.html读取为默认值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我想有一个文件config.ru告诉rack来读取当前目录,这样我就可以像访问简单的apache服务器一样访问所有文件,并且还可以使用index.html文件读取默认的根目录......有什么办法可以做到这一点?

config.ru

run Rack::Directory.new('')
#this would read the directory but it doesn't set the root to index.html


map '/' do
  file = File.read('index.html')
  run Proc.new {|env| [200, {'Content-Type' => 'text/html'}, file] }
end
#using this reads the index.html mapped as the root but ignores the other files in the directory

我尝试了下面的示例,但thin无法正确启动。

builder = Rack::Builder.new do

  run Rack::Directory.new('')

  map '/' do
    file = File.read('index.html')
    run Proc.new {|env| [200, {'Content-Type' => 'text/html'}, file] }
  end

end

Rack::Handler::Thin.run builder, :port => 3000

提问于
用户回答回答于

我认为你少了rackup命令。以下是它的使用方法:

rackup config.ru

这将使用webrick在端口9292上运行您的机架应用程序。可以“rackup --help“获取更多信息,以了解如何更改这些默认设置。

我认为它应该是这样的:

# This is the root of our app
@root = File.expand_path(File.dirname(__FILE__))

run Proc.new { |env|
  # Extract the requested path from the request
  path = Rack::Utils.unescape(env['PATH_INFO'])
  index_file = @root + "#{path}/index.html"

  if File.exists?(index_file)
    # Return the index
    [200, {'Content-Type' => 'text/html'}, File.read(index_file)]
    # NOTE: using Ruby >= 1.9, third argument needs to respond to :each
    # [200, {'Content-Type' => 'text/html'}, [File.read(index_file)]]
  else
    # Pass the request to the directory app
    Rack::Directory.new(@root).call(env)
  end
}
用户回答回答于

如果只想为当前目录提供一些一次性任务,则只需要这些:

ruby -run -e httpd . -p 5000

扫码关注云+社区