Вам необходимо использовать Rack::Builder
, чтобы использовать синтаксис use SomeMiddleware
в обычном скрипте Ruby (обычно он используется в файле config.ru
).Вам также нужно run
для вашего приложения.Обратите внимание, что ключ urls
для Rack::Static
принимает массив, а не одну строку:
require 'rack'
Rack::Handler::Thin.run(Rack::Builder.new {
use(Rack::Static, urls: ["/resource/"], root: "/")
run ->env{[200, {}, [some_dyamically_generated_content]]}
}, Port: 3000)
Здесь Rack::Builder
принимает ваше приложение, ->env{[200, {}, [some_dyamically_generated_content]]}
, добавляя к нему промежуточное ПО Rack::Static
и создание нового комбинированного приложения, которое затем передается в Thin для запуска.
Rack::Static
- это компонент промежуточного программного обеспечения, который вы можете добавить к существующим стоечным приложениям.Rack::File
и Rack::Directory
оба являются стоечными приложениями, а не промежуточным программным обеспечением (Rack::Static
использует Rack::File
внутри, как и Rack::Directory
по умолчанию).Вы можете добиться того же эффекта, что и выше, используя Rack::File
и команду map
:
require 'rack'
Rack::Handler::Thin.run(Rack::Builder.new {
map "/resource/" do
run Rack::File.new "/"
end
map "/" do
run ->env{[200, {}, [some_dyamically_generated_content]]}
end
}, Port: 3000)
Более распространенный способ сделать это - поместить содержимое блока, переданного в Rack::Bundler.new
, вфайл config.ru
:
use(Rack::Static, urls: ["/resource/"], root: "/")
run ->env{[200, {}, [some_dyamically_generated_content]]}
Затем вы можете запустить его с помощью thin start
, который должен найти config.ru
при запуске из того же каталога, или вы можете использовать опцию -R
, чтобы указатьфайл.Также можно использовать команду rackup
, rackup -s thin
, если вы хотите указать Thin в качестве сервера.