Я хочу обслуживать статические файлы, а также динамическое содержимое через Rack. Раньше я использовал WEBrick без использования Rack с таким кодом, и это работало:
@s = WEBrick::HTTPServer.new(
Port: 3000,
BindAddress: "localhost",
Logger: WEBrick::Log.new(File::NULL),
AccessLog: [nil, nil]
)
%w[INT TERM].each{|signal| trap(signal){@s.shutdown}}
@s.mount("/", self)
@s.mount("/resource/", WEBrick::HTTPServlet::FileHandler, "/")
@s.start
В приведенном выше примере на запросы к localhost:3000
будет отвечать динамическое содержимое, а на запросы к localhost:3000/resource/path_to_file
будет отвечать статический файл, расположенный в /path_to_file
на моем компьютере.
Теперь я хочу переключиться на систему, использующую стойку с тонким сервером. Я написал следующее, но не смог получить статические файлы. Как его изменить, чтобы он работал?
Rack::Handler::Thin.run(->env{
h = Rack::Utils.parse_nested_query(env["QUERY_STRING"])
# I tried the following three lines one at a time, but neither worked.
use(Rack::Static, urls: "/resource/", root: "/") # First try
Rack::File.new("/resource").call(env) # Second try
Rack::Directory.new("/resource").call(env) # Third try
[200, {}, [some_dyamically_generated_content]]
}, Port: 3000)
Я знаю, что есть похожий вопрос: Как обслуживать статические файлы через Rack?, но я не смог заставить его работать. Я не знаю, как использовать Rack::Static
, Rack::File
или Rack::Directory
. Пожалуйста, научите меня.