title | layout | id |
---|---|---|
Опции и конфигурация |
default |
configuration |
В Sinatra есть встроенные опции, которые отвечают за дополнительную
функциональность фреймворка. Кроме того, приложения на Sinatra могут
задавать и использовать свои собственные опции.
Опции -- это переменные на уровне всего приложения, которые
конфигурируются с помощью методов set
, enable
, disable
и доступны на уровне запроса через объект settings
.
В самом простейшем случае метод set
принимает два аргумента: название
опции и ее значение.
set :foo, 'bar'
get '/foo' do
"foo is set to " + settings.foo
end
Если в качестве значения опции использовать блок Proc
, то он
будет выполнен при обращении к опции.
set :foo, 'bar'
set :baz, Proc.new { "Hello " + foo }
get '/baz' do
"baz is set to " + settings.baz
end
Ответом на запрос /baz
должен быть "baz is set to Hello bar".
Вы можете задавать несколько опций сразу, передавая методу set
хеш.
Соответственно, предыдущий пример можно переписать вот так:
set :foo => 'bar', :baz => Proc.new { "Hello " + foo }
Методы enable
и disable
используются для опций, значением которых
может быть либо true
, либо false
. Следующие два примера делают то
же самое:
enable :sessions, :logging
disable :dump_errors, :some_custom_option
Используя set
:
set :sessions, true
set :logging, true
set :dump_errors, false
set :some_custom_option, false
Опция, задающая текущее рабочее окружение. Обычно это
:development
, :test
или :production
. По умолчанию --
значение переменной RACK_ENV
(ENV['RACK_ENV]
) или :development
,
если RACK_ENV
не задана.
Окружение может быть задано явно:
set :environment, :production
Поддержка закодированных сессий, работающих на основе кук браузера, включена в Sinatra, но отключена по умолчанию. Включить их можно так:
set :sessions, true
Поддержка сессий осуществляется с помощью прослойки
Rack::Session::Cookie
.
Если данная опция включена, то в STDERR
будут выводиться запросы
в формате логов веб-сервера Apache. Эта опция включена по умолчанию
для классических приложений и отключена для модульных.
Для этого используется прослойка Rack::CommonLogger
.
Если данная опция включена, то актуальный метод HTTP запроса может быть
переопределен с помощью параметра _method
, переданного в теле этого же
POST запроса. Этот хак используется, чтобы заставить некоторые POST запросы
выглядеть как другие HTTP запросы (PUT
, DELETE
), и обычно нужен,
например, при отправке данных из HTML форм (браузеры умеют не все
методы HTTP).
Для этого используется прослойка Rack::MethodOverride
.
Базовая директория приложения. По умолчанию, это директория, в которой
находится главный файл приложения (опция :app_file
). Значение этой
опции используется для конструирования других опций: :public
и
:views
. Довольно часто опцию :root
задают явно в файле-исходнике
приложения:
set :root, File.dirname(__FILE__)
Определяет, должны ли отдаваться статические файлы из публичной
директории приложения (опция :public
). Если эта опция включена,
то Sinatra в первую очередь будет проверять существование статического
файла и лишь затем искать соответствующий маршрут.
Опция :static
включена по умолчанию, если задана публичная
директория (:public
).
Строка, задающая путь к директории, откуда должны отдаваться
статические файлы. По умолчанию, это директория с именем "public" внутри
корневой директории приложения (опция :root
). Вы можете явно задать
публичную директорию с помощью:
set :public, '/var/www'
Самый лучший способ использовать другое название для этой
директории -- использование значения, которое ссылается на опцию :root
:
set :public, Proc.new { File.join(root, "static") }
Строка, задающая путь к директории, где находятся шаблоны. По умолчанию,
это директория с именем "views" внутри корневой директории приложения
(опция :root
).
Самый лучший способ использовать другое название для этой
директории -- использование значения, которое ссылается на опцию :root
:
set :views, Proc.new { File.join(root, "templates") }
Если включено, то встроенный веб-сервер будет запущен сразу после
полной загрузки всего приложения. По умолчанию, эта опция включена, если
:app_file
совпадает с $0
, то есть при запуске приложения напрямую
с помощью ruby myapp.rb
. Выключить его можно с помощью:
set :run, false
Строка или массив из имен обработчиков Rack. Когда опция :run
включена, Sinatra пройдется по этому списку и запустит первый же
доступный обработчик. По умолчанию, эта опция задана как:
set :server, %w[thin mongrel webrick]
Строка, задающую имя хоста или ip-адрес интерфейса, на котором
должен быть запущен встроенный веб-сервер, если включена опция
:run
. По умолчанию, 0.0.0.0
, с таким значением сервер будет
слушать на всех доступных интерфейсах. Чтобы сервер принимал
только локальные соединения используйте:
set :bind, 'localhost'
Порт, который должен использовать встроенный веб-сервер, когда
включена опция :run
. По умолчанию, 4567
. Задать его можно
явно с помощью:
set :port, 9494
Опция :app_file
используется для конструирования значений
по умолчанию для опций :root
, :public
и :views
. Можно
перекрыть встроенный механизм определения этой опции и задать
ее явно в главном файле-исходнике приложения:
The :app_file
setting is used to calculate the default :root
,
set :app_file, __FILE__
Кроме того, эта опция используется, чтобы определить, должна ли Sinatra запускать веб-сервер в случае классического приложения.
Если включено, то в STDERR
будет выводиться отладочная информация
об исключении, когда оно возбуждено в фильтре или маршруте.
По умолчанию, эта опция включена для классических приложений.
Ее можно отключить с помощью:
set :dump_errors, false
Если выключено, то при возбуждении исключения из маршрутов или фильтров оно
будет "поймано" и передано обработчикам ошибок, которые обычно выставляют
кодом HTTP ответа 5xx и отрисовывают какую-нибудь страницу с сообщением об
ошибке. В противном случае, исключение будет проброшено за пределы приложения,
где оно может быть обработано веб-сервером или Rack прослойкой, такой как
Rack::ShowExceptions
или Rack::MailExceptions
.
Sinatra может работать в окружении с тредами, где больше чем один запрос может обрабатываться одновременно. Тем не менее, не все приложения и библиотеки потоко-безопасны, и это может стать причиной серьезных и трудноуловимых ошибок. Если эта опция включена, то все запросы будут синхронизированы относительно мьютекса, гарантируя обработку только одного запроса одновременно.
По умолчанию, опция :lock
отключена.
Если включено, то при возбуждении необработанного исключения будет отображаться
страница с отладочной информацией. По умолчанию, включено в режиме разработки
(:development
).