Йесод (веб-фреймворк)
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
![]() | |
Оригинальный автор(ы) | Майкл Снойман |
---|---|
Разработчик(и) | Майкл Снойман и др. |
Первоначальный выпуск | 2010 г |
Стабильная версия | 1.6.24.5 [1] ![]() |
Репозиторий | |
Написано в | Хаскелл |
Операционная система | Кросс-платформенный |
Доступно в | Английский |
Тип | Веб-фреймворк |
Лицензия | С |
Веб-сайт | www |
Йесод ( IPA: [дже'сод] ; Иврит : יְסוֺד , «Основа») — это веб-фреймворк , основанный на языке программирования Haskell для продуктивной разработки типобезопасной модели репрезентативной передачи состояния (REST) (где унифицированные указатели ресурсов ( URL-адреса ) идентифицируют ресурсы и протокол передачи гипертекста ( HTTP) методы идентифицируют переходы), высокопроизводительные веб-приложения, разработанные Майклом Снойманом и др. Это бесплатное программное обеспечение с открытым исходным кодом, выпущенное под лицензией MIT .
Yesod основан на шаблонах для создания экземпляров перечисленных сущностей и функций обработки динамического контента с помощью Template Haskell конструкций для размещения шаблонов контента доменно-ориентированного языка (eDSL), называемых QuasiQuotes, где контент преобразуется в выражения кода с помощью инструкций метапрограммирования . [2]
Существуют также веб-шаблоны языковых фрагментов , которые допускают интерполяцию выражений кода, что обеспечивает полную проверку типов во время компиляции . [3]
Yesod делит свои функции на отдельные библиотеки ( база данных , HTML-рендеринг, формы и т. д.), поэтому функции можно использовать по мере необходимости.
MVC-архитектура
[ редактировать ](МВК)
Контроллер
[ редактировать ]Серверный интерфейс
[ редактировать ]Yesod использует интерфейс веб-приложения (WAI), [4] тип интерфейса прикладного программирования ( API ), предназначенный для изоляции сервлетов , также известных как веб-приложения, от серверов, с обработчиками серверных протоколов Common Gateway Interface (CGI), [5] ФастCGI , [6] Простой общий интерфейс шлюза (SCGI), [7] Варп, [8] Запустить (открыть как локальный URL-адрес в браузере по умолчанию, закрывая сервер при закрытии окна), [9]
Тип фундамента
[ редактировать ]См. исх. [10] Yesod требует типа данных, который создает экземпляры классов модель-представление-контроллер . Это называется тип фундамента . В приведенном ниже примере оно называется «MyApp».
Модель REST идентифицирует веб-ресурс с помощью веб-пути. Здесь ресурсам REST присваиваются имена с суффиксом R (например, «HomeR») и они перечислены в шаблоне описания карты сайта parseRoutes . Из этого списка получаются имена маршрутов и имена обработчиков диспетчеризации.
Yesod использует метапрограммирование Template Haskell для генерации кода из шаблонов во время компиляции, гарантируя совпадение имен в шаблонах и проверку типов (например, имена веб-ресурсов и имена обработчиков).
Вставив вызов mk Yesod , вы вызовете примитивы Template Haskell для генерации кода. [11] соответствующие членам типа маршрута, и экземпляры классов контроллера диспетчеризации для отправки GET вызовов для маршрутизации HomeR в подпрограмму с именем, составляющую их обоих как «getHomeR», ожидая наличия существующего обработчика, соответствующего имени.
Привет, мир
[ редактировать ]"Привет, мир!" пример программы на основе серверного интерфейса Common Gateway Interface (CGI) (типы обработчиков изменились, но философия осталась):
{- file wai-cgi-hello.hs -}
{-# LANGUAGE PackageImports, TypeFamilies, QuasiQuotes, MultiParamTypeClasses,
TemplateHaskell, OverloadedStrings #-}
import "wai" Network.Wai
import "wai-extra" Network.Wai.Handler.CGI (run) -- interchangeable WAI handler
import "yesod" Yesod
import "yesod-core" Yesod.Handler (getRequest)
import "text" Data.Text (Text)
import "shakespeare" Text.Cassius (Color(..), colorBlack)
-- the Foundation type
data MyApp = MyApp
-- sitemap template, listing path, resource name and methods accepted
-- `mkYesod` takes the foundation type name as param. for name composition of dispatch functions
mkYesod "MyApp" [parseRoutes|
/ HomeR GET
|]
instance Yesod MyApp
-- indentation structured CSS template
myStyle :: [Text] → CssUrl url
myStyle paramStyle =
[cassius|
.box
border: 1px solid #{boxColor}
|]
where
boxColor = case paramStyle of
["high-contrast"] → colorBlack
_ → Color 0 0 255
-- indentation structured HTML template
myHtml :: [(Text, Text)] → HtmlUrl url
myHtml params = [hamlet|
<!-- indentation, or lack of it, under starting tags or commands ('$' prefix)
describe the content or sequence tree structure -->
<!-- '.' or '#' prefixes in tags introduce css styled "class" or "id" attribute values -->
<!-- interpolation of haskell expressions follow the "shakespeare templates" #{expr} syntax -->
<p>Hello World! There are <span .box>#{length params} parameters</span>:
$if null params
<p>Nothing to list
$else
<ul>
$forall param <- params
<li>#{fst param}: #{snd param}
|]
getHomeR :: Handler RepHtml
getHomeR = do
req <- getRequest
let params = reqGetParams req
paramStyle <- lookupGetParams "style"
defaultLayout $ do
-- adding widgets to the Widget monad (a ''Writer'' monad)
setTitle "Yesod example"
toWidgetHead $ myStyle paramStyle
toWidgetBody $ myHtml params
-- there are ''run'' function variants for different WAI handlers
main = toWaiApp MyApp >>= run
# cgi test
export REMOTE_ADDR=127.0.0.1
export REQUEST_METHOD=GET
export PATH_INFO=/
export QUERY_STRING='p1=abc;p2=def;style=high-contrast'
./wai-cgi-hello
Ресурсы, маршруты, обработчики методов HTTP
[ редактировать ]См. исх. [12] [13] Yesod следует репрезентативной модели передачи состояния доступа к веб-документам, идентифицируя документы. и каталоги как ресурсы с конструктором Route, названным с суффиксом R в верхнем регистре (например, HomeR).
- Таблица маршрутов
- Шаблон parseRoutes должен содержать список ресурсов, определяющих части маршрута, имя ресурса и методы отправки, которые будут приняты.
Захват сегмента URL-адреса в качестве параметра возможен, если указать префикс «#» для захвата одного сегмента или «*» для захвата нескольких сегментов, за которым следует тип параметра.
-- given a MyApp foundation type
mkYesod "MyApp" [parseRoutes|
/ HomeR -- no http methods stated: all methods accepted
/blog BlogR GET POST
-- the '#' prefix specify the path segment as a route handler parameter
/article/#ArticleId ArticleR GET PUT
-- the '*' prefix specify the parameter as a sequence of path pieces
/branch/*Texts BranchR GET
-- to simplify the grammar, compound types must use an alias, eg. type Texts for ''[Text]''
|]
- Применение предыдущего шаблона генерирует следующие конструкторы маршрутов:
data Route MyApp =
HomeR -- referenced in templates as: @{HomeR}
| BlogR -- in templates: @{BlogR}
| ArticleR ArticleId -- in templates: @{ArticleR myArticleId}
| BranchR Texts -- in templates: @{BranchR myBranchSegments}
- Для каждого поддерживаемого метода HTTP необходимо создать функцию-обработчик, соответствующую именам отправки, сгенерированным mk Yesod из шаблона parseRoutes , путем добавления префикса имени метода (или префикса «обработчик», если метод не указан) к ресурсу, как описано (фактические версии типы обработчиков изменились, но философия осталась):
-- for "/ HomeR" -- no http methods stated ⇒ only one handler with prefix ''handler''
handlerHomeR :: HasReps t ⇒ Handler t
-- for "/blog BlogR GET POST"
getBlogR :: HasReps t ⇒ Handler t
postBlogR :: HasReps t ⇒ Handler t
-- for "/article/#ArticleId ArticleR GET PUT"
getArticleR :: HasReps t ⇒ ArticleId → Handler t
putArticleR :: HasReps t ⇒ ArticleId → Handler t
Запрос данных, параметры, файлы cookie, языки, другая информация заголовка
[ редактировать ]См. исх. [12]
Аутентификация, авторизация
[ редактировать ]См. исх. [14] Плагины аутентификации: OpenID , BrowserID , Email, GoogleEmail, HashDB, RpxNow. [15]
- Есть важная настройка автоматического перенаправления после аутентификации. [16]
Сессии
[ редактировать ]См. исх. [17] Серверные части сеанса: ClientSession [18] (он сохраняет сеанс в файле cookie), ServerSession [19] [20] (он хранит большую часть данных сеанса на сервере)
- >> Чтобы избежать ненужной нагрузки на полосу пропускания, рабочие сайты могут обслуживать свой статический контент с отдельного доменного имени, чтобы избежать накладных расходов на передачу файлов cookie сеанса для каждого запроса.
Сообщения сеанса
[ редактировать ]Сообщение об успехе, сбое или индикаторное сообщение может быть сохранено ( setMessage ) в сеансе и будет показано, если оно существует, с помощью процедуры default_layout через метод default_layout.hamlet
шаблон, согласовывается на консультации. [21]
Дочерние сайты
[ редактировать ]Общие дочерние префиксы URL-адресов для рабочих процессов, обслуживания файлов или разделения сайта. См. исх. [22] [23]
Встроенные дочерние сайты: Статические, [24] [25] Авторизация [26]
Обработка форм, генерация макета
[ редактировать ]См. исх. [27]
Тип формы здесь — это объект, который используется в контроллере для анализа и обработки ввода пользователя в поля формы и создания пары (FormResult, Widget), где виджет содержит макет следующего рендеринга формы с сообщениями об ошибках и метками. Его также можно использовать для создания новой формы с пробелами или значениями по умолчанию.
Тип формы принимает форму функции фрагмента HTML, который будет встроен в представление, которое будет содержать скрытые поля в целях безопасности.
Объект формы генерируется из аппликативно - монадической композиции полей для комбинированного последовательного анализа входных данных полей.
Существует три типа форм:
- Аппликативный (с табличным расположением),
- Монадический (со свободным стилем макета), оба в модуле Yesod.Form.Functions,
- Ввод (только для анализа, представление не создается) в модуле Yesod.Form.Input.
Генераторы полей, имена которых состоят из формы начального типа. (a|m|i)
с последующим (req|opt){- required or optional -}
, есть компонент fieldParse и компонент fieldView. [28]
- функция
runForm{Post|Get}
запускает анализаторы полей для входных данных полей формы и генерирует пару (FormResult, Widget) из представлений, предлагающих новый виджет формы с полученными значениями полей формы по умолчанию. Суффикс функции — это метод http, используемый при отправке формы. - пока
generateForm{Post|Get}
игнорирует входные данные от клиента и генерирует пустой виджет формы или виджет формы по умолчанию. [29]
Фактические параметры и типы функций изменились в версиях Yesod. Проверьте книги Йесод и подписи библиотек.
Магия заключается в Тип данных FormResult Прикладной экземпляр, где (<*>) собирает сообщения об ошибках в случае FormFailure [textErrMsg]
результирующие значения [30]
Монадические формы допускают свободную компоновку и лучшую обработку Участники скрытого поля . [27]
Образец аппликатива [31] форма:
-- a record for our form fields
data Person = Person {personName :: Text, personAge :: Int, personLikings :: Maybe Text}
-- the Form type has an extra parameter for an html snippet to be embedded, containing a CSRF token hidden field for security
type Form sub master x = Html → MForm sub master (FormResult x, Widget)
{-
-- for messages in validation functions:
@param master: yesod instance to use in renderMessage (return from handler's getYesod)
@param languages: page languages to use in renderMessage
-- optional defaults record:
@param mbPersonDefaults: Just defaults_record, or Nothing for blank form
-}
personForm :: MyFoundationType → [Text] → Maybe Person → Form sub master Person
{- ''aopt'' (optional field AForm component) for "Maybe" fields,
''areq'' (required fld AForm comp.) will insert the "required" attribute
-}
personForm master languages mbPersonDefaults = renderTable $
Person <$> areq textField fldSettingsName mbNameDefault
<*> areq customPersonAgeField fldSettingsAge mbAgeDefault
<*> aopt textareaField fldSettingsLikings mbLikingsDefault
where
mbNameDefault = fmap personName mbPersonDefaults
mbAgeDefault = fmap personAge mbPersonDefaults
mbLikingsDefault = fmap personLikings mbPersonDefaults
-- "fieldSettingsLabel" returns an initial fieldSettings record
-- recently the "FieldSettings" record can be defined from a String label since it implements IsString
fldSettingsName = (fieldSettingsLabel MsgName) {fsAttrs = [("maxlength","20")]}
fldSettingsAge = fieldSettingsLabel MsgAge
fldSettingsLikings = (fieldSettingsLabel MsgLikings) {fsAttrs = [("cols","40"),("rows","10")]}
customPersonAgeField = check validateAge intField
validateAge y
| y < 18 = Left $ renderMessage master languages MsgUnderAge
| otherwise = Right y
Вид
[ редактировать ]Показанные типы соответствуют более старой версии, но принцип остается прежним.
Монада Handler возвращает содержимое в одном или нескольких форматах как компоненты типов, реализующих HasReps Класс [32] { RepHtml, RepJson, RepXml, RepPlain , двойной RepHtmlJson — пара или список пар. [(ContentType, Content)]
, ..}. [33] [34] Примеры Json: [35] [36] [37]
The HasReps по умолчанию Реализация ChooseRep выбирает представление документа, которое будет возвращено, в соответствии со списком предпочтительных типов контента клиента. принять заголовок. [32]
- Виджеты [38] представляют собой HTML DOM кода фрагменты , созданные с помощью определенных команд (например, setTitle) или из шаблонов структуры ( HTML )/поведения ( JavaScript )/стиля ( CSS ), чьи типы создают экземпляры классов ToWidget, ToWidgetHead или ToWidgetBody.
Монада виджета, [39] по мотивам писателя [40] один и аргумент defaultLayout облегчает объединение виджетов.
Шаблоны на основе отступов для разметки с древовидной структурой
[ редактировать ]- тот квазицитат hamlet (анализатор кода шаблона Haskell во время компиляции ) [2] [41] указано в скобок TH Oxford синтаксисе
[qq| ... |]
представляет структурированный HTML-шаблон на основе отступов. (См. док. [42] ). [43]
'$' ставится перед строками логических операторов.
Автоматические закрывающие теги создаются только для тега в позиции начала строки.
- тот квазицитатор whamlet возвращает выражение виджета. (сохраняется в Виджете перед [hamlet|..|]).
toWidget [hamlet|
$doctype 5
<html>
<!-- only the tag at the beginning of the line will be automatically closed -->
<!-- '.' or '#' prefixes in tags introduce class/id names, à la CSS -->
<!-- ":boolVar:" prefix in attributes makes them conditionally generated -->
<!-- interpolation of haskell expressions follow the "shakespearean templates"
syntax introduced in the so named section -->
<head>
<title>#{pageTitle} - My Site
<link rel=stylesheet href=@{Stylesheet_route}>
<body>
<header>
^{headerTemplate}
<section #mySectionId>
<p><span .titleClass>_{MsgArticleListTitle}</span>
$if null articles
<p :isRed:style="color:red">_{MsgSorryNoArticles}
$else
<ul>
$forall art <- articles
<li>#{articleNumber art} .- #{articleTitle art}
<footer>
^{footerTemplate}
|]
Интерполяция шаблонов — шекспировские шаблоны
[ редактировать ]См. исх. [42] Это шаблоны представлений контента, которые следуют общему шаблону замены выражений кода в фигурных скобках с разными префиксами символов для ссылки.
- шаблонные выражения с
^{...}
- ссылается на другие шаблоны того же типа с заданными параметрами как
^{template params}
, - маршрутизировать выражения с помощью
@{...}
- безопасные (введенные) URL-адреса как
@{HomeR}
, - выражения сообщения с
_{...}
- рендеринг сообщений i18n как
_{MsgMessageLabel params}
- другие выражения Haskell с
#{...}
- рендеринг выражения Haskell как
#{haskell_expression}
какой тип должен быть конвертируемым
- в случае HTML-шаблонов Hamlet тип выражения должен быть экземпляром Text.Blaze.ToMarkup. [44]
- в случае шаблонов CSS тип выражения должен быть экземпляром Text.Cassius.ToCss. [45]
- в случае шаблонов JavaScript тип выражения должен быть экземпляром Text.Julius.ToJavascript. [46]
- в случае определений сообщений i18n (в "
<isoLanguage>
.msg") с интерполяцией параметров, тип выражения должен быть экземпляром Text.Shakespeare.I18N.ToMessage. [47] - в случае текстовых/обычных шаблонов (для использования в электронных письмах) тип выражения должен быть экземпляром Text.Shakespeare.Text.ToText. [48]
Использование неанглоязычного текста в выражениях требует использования Юникод. типа, поддерживающего Text , поскольку компилятор Glasgow Haskell (GHC) показать тип Строка отображает символы, отличные от ASCII, как экранированные числовые коды.
- Шаблоны внешних файлов
- во время компиляции: содержимое шаблона можно загрузить из внешних файлов во время компиляции. вызовы сращивания как $(expr) . [49]
- во время выполнения: существует режим перезагрузки для повторной обработки внешних файлов шаблонов при каждом вызове службы, за исключением HTML. шаблоны деревень : см. документ. [50]
Другие шаблоны
[ редактировать ]- для JavaScript, CoffeeScript, Рой
- тот julius quasiquoter: представляет шаблон JavaScript. [51] Варианты JavaScript CoffeeScript и язык Roy [52] есть также конкретные квазицитаты . [2] [51]
- для CSS
- тот Cassius Quasiquoter: представляет шаблон CSS со структурированием на основе отступов. [53]
- тот lucius quasiquoter: представляет шаблон CSS со стандартным синтаксисом плюс заменами в стиле шаблона Шекспира. [54]
- TypeScript и JSX Шаблоны
- тот tsc и Квазицитаторы tscJSX . Только на UNIX производных ( Windows пока нет). [55]
- текстовые/простые шаблоны
- для электронной почты или текстового/обычного http типа контента . [56]
- шаблоны: lt : ленивый текст, st : строгий текст
- шаблоны для текста с разделителем левого поля '|': лбт (ленивый), сбт (строгий)
Локализуемые сообщения
[ редактировать ]См. исх. [57]
Сообщения приложения Yesod можно локализовать ( i18n ). Они должны проводиться в рамках папка сообщений в файлах с именем на основе ISO , например <iso-language>.msg
Записи сообщений соответствуют шаблону EBNF :
-- EBNF: identifier, {' ', parameter, '@', type}, ":", text with interpolations
ArticleUnexistent param@Int64 : unexistent article #{param}
- Конструкторы сообщений формируются с добавлением «Msg» к идентификатору метки сообщения.
- тип данных сообщения формируется путем добавления «Сообщения» к имени основного типа.
-- in code
myMsg :: MyAppMessage -- datatype appending "Message" to the foundation type
myMsg = MsgArticleUnexistent myArticleId -- constructor prepending "Msg" to the msg. label
-- in widget templates
_{MsgArticleUnexistent myArticleId}
Фактическая поддержка i18n отсутствует в шаблон приложения стека . mkMessage "MyApp" messagesFolder isoLangDefault
необходимо добавить в файл «Foundation.hs», чтобы создать экземпляры сообщений. [58]
Навигационные хлебные крошки
[ редактировать ]- Навигационные хлебные крошки . [59] Экземпляр YesodBreadcrumbs должен быть предоставлен для сайта, на котором работает функция генератора. хлебная крошка должна возвращать для каждого маршрута заголовок и родительский элемент. Затем функция запроса хлебные крошки вернут текущий заголовок маршрута и пары предков (маршрут, заголовок).
XML-карта сайта поисковой системы
[ редактировать ]- для поисковых систем XML-файлы Sitemap , [60] где sitemap возвращает XML-карту сайта в виде HTTP- ответа с маршрутами, которые мы хотим, чтобы поисковые системы сканировали, и атрибутами для указания сканеру из предоставленного списка Записи SitemapUrl .
Просмотры веб-канала
[ редактировать ]- веб-каналов Просмотры ( RDF Site Summary (RSS) – Atom ). [61] Обработчики возвращаются RepRss, RepAtom или двойной Содержимое RepAtomRss (выбирается на принять список предпочтительных типов контента заголовков) из заданного Структура корма .
Модель
[ редактировать ]Использование изменяемых данных в памяти (в основном типе данных)
[ редактировать ]Например, подсчет посетителей. См. исх. [62]
Уровень базы данных
[ редактировать ]- постоянный — это имя уровня доступа к базе данных с шаблонами для генерации типов сущностей и ключей, а также инициализации схемы. [63] [64] [65]
Существует первоклассная поддержка PostgreSQL , SQLite , MongoDB , CouchDB и MySQL , а также экспериментальная поддержка Redis . [63]
Структура базы данных описывается в шаблоне, в котором перечислены сущности, поля и ограничения. [66]
- Для каждого перечисленного объекта создается целочисленный ключевой столбец «id» с атрибутами автоинкремента и первичного индекса, с псевдонимом типа, добавляющим идентификатор к имени объекта.
- Для каждой перечисленной сущности создается тип записи, названный так же, как сущность, где имена полей записи состоят из префикса имени сущности перед именем поля, например «personName». Тип EntityField «PersonName» также создается для ссылки на внешний ключ из других сущностей.
- Существует механизм автоматической миграции схемы базы данных для обновлений схемы БД, для успешного выполнения которого необходимо при добавлении столбцов в существующие таблицы указать «Ограничения значений столбцов по умолчанию с нотацией уровня sql ». [67]
- Мощность «не более одной» имеет специальный механизм вокруг типа Checkmark. [68]
- Слабые сущности (дочерние элементы в жизненных отношениях владелец-потомок) не имеют специальной поддержки триггеров есть функции для удаленияCascade вручную. каскадного удаления, но в модуле Database.Persist.Class [69]
- автоматическое создание таблиц, обновление схемы и миграция таблиц
- Модификации шаблона сущностей приводят к обновлению схемы с автоматическим созданием таблиц и миграции для СУБД , поддерживающих команды SQL «ALTER TABLE», в процедуреmigrAll , созданной на основе содержимого шаблона. См. «Миграции» в исх. [63] искать СУБД с поддержкой миграции .
share [mkPersist sqlSettings,
mkMigrate "migrateAll" -- generates the migration procedure with the specified name
] [persist|
User -- table name and entity record type
-- implicit autoincrement column "id" as primary key, typed UserId
ident Text -- refers to db. table column "ident";
-- generates a record field prefixing the table name as "userIdent"
password Text Maybe -- Maybe indicates Nullable field
UniqueUser ident -- unique constraint with space sep. field sequence
Email -- table name and entity record type
-- implicit autoincrement column "id" as primary key, typed EmailId
email Text
user UserId -- foreign key by specifying other tables EntityField types
verkey Text Maybe
newlyAddedColumn Text "default='sometext'::character varying" -- sql level Default constraint
UniqueEmail email -- unique constraint
|]
- Esqueleto: уровень комбинаторов Haskell для генерации правильных реляционных запросов к постоянным файлам . [70]
Пример постоянных запросов rawSQL и Esqueleto . [71]
Электронная почта
[ редактировать ]Следующие пакеты являются частью платформы Yesod : [72]
- email-validate: Проверка адреса электронной почты. [73]
- mime-mail: Составляйте и отправляйте в формате MIME . сообщения электронной почты [74]
Фейсбук
[ редактировать ]- Полезные функции склеивания между библиотекой fb и Yesod. [75]
Цикл разработки
[ редактировать ]Новые приложения Yesod создаются с помощью инструмента HaskellStack. [76] шаблоны, заменяющие предыдущую команду "yesod init"
стека Приложение на основе . имена шаблонов имеют префикс Yesod как «yesod-{minimal | postgres | sqlite | mysql | mongo | ...}»
- использует репозиторий stackage Поскольку HaskellStack по умолчанию , дополнительные пакеты из репозитория hackage следует указывать в разделе extra-deps stack.yaml .
- Пакеты можно настроить для локальной подпапки. stack.yaml Они должны быть указаны в разделе пакетов .
Инструмент «Помощник Йесод»
[ редактировать ]- Yesod Вспомогательный инструмент [77]
yesod devel
запускается с сайта проекта, перекомпилирует и перезапускает проект при каждом изменении дерева файлов.yesod add-handler
добавляет в проект новый обработчик и модуль, добавляя предложение импорта для обработчика в модуле «Приложение».
Развертывание с помощью Keter: монитор сервера веб-приложений и обратный прокси-сервер.
[ редактировать ]Keter — это процесс как услуга, который управляет развертыванием и перезапуском серверов веб-приложений Yesod , а также, для каждого веб-приложения , созданием базы данных для PostgreSQL .
Консольная команда yesod keter
упаковывает веб-приложение. как пакет кетера для загрузки в папку кетер с именем «входящие».
Кетер отслеживает папку «входящие» и распаковывает приложение. на временный, затем назначает веб-приложению порт для прослушивания и запускает его.
Первоначально он работал с Nginx в качестве обратного прокси (кетер версии 0.1*), добавляя записи виртуального сервера в свою конфигурацию и заставляя Nginx перезагружать его, но теперь Keter сам предоставляет собственную функцию обратного прокси , удаляя зависимость от Nginx и выступая в качестве основного веб-сервера. [81]
Старая документация (на основе Nginx). [82] [83]
Интеграция с JavaScript, созданным на функциональных языках.
[ редактировать ]См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ "йесодвеб/йесод" .
- ^ Jump up to: а б с «HaskellWiki — Квазицитата» . Хаскелл.орг. 26 мая 2012 г. Проверено 23 октября 2012 г.
- ^ «Университет Кента — сравнение динамических и статических языковых подходов к веб-фреймворкам — Yesod против Ruby on Rails» (PDF) . Проверено 23 октября 2012 г.
- ^ «Вай-пакет» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Пакет wai-extra с обработчиком CGI WAI» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Пакет wai-handler-fastcgi» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Пакет wai-handler-scgi» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Варп-пакет» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Пакет запуска вай-обработчика» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ Jump up to: а б "книга - Основы" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ mkYesod Код
- ^ Jump up to: а б "книга - Маршрутизация и обработчики" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Играем с маршрутами и ссылками» . FPComplete.com. 17 октября 2012 г. Проверено 28 октября 2012 г.
- ^ "книга - Аутентификация и авторизация" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Пакет Yesod-auth» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ "книга - Сеансы - См. раздел "Конечный пункт назначения" " . Yesodweb.com . Проверено 17 ноября 2012 г.
- ^ «Сессии» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Веб.КлиентСессия» . Hackage.haskell.org . Проверено 25 октября 2012 г.
- ^ «ServerSession: безопасные модульные сеансы на стороне сервера» . Hackage.haskell.org . Проверено 29 октября 2018 г.
- ^ «Веб.СерверСессия.Фронтенд.Йесод» . Hackage.haskell.org . Проверено 29 октября 2018 г.
- ^ «Сообщения сеанса» . Yesodweb.com . Проверено 23 октября 2018 г.
- ^ «Создание дочернего сайта» . Yesodweb.com . Проверено 25 октября 2012 г.
- ^ «Йесод и дочерние сайты: легкая задача» . Моноид.se. 22 августа 2012 г. Проверено 28 октября 2012 г. []
- ^ «Магия Йесода, часть 2 — см. раздел «Статический подсайт» » . Yesodweb.com. 25 декабря 2010 г. Проверено 25 октября 2012 г.
- ^ «Пакет Yesod-static — Статический подсайт» . Hackage.haskell.org . Проверено 25 октября 2012 г.
- ^ «Пакет Yesod-auth — Подсайт Auth» . Hackage.haskell.org . Проверено 25 октября 2012 г.
- ^ Jump up to: а б «книга — Формы» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Йесод.Форма.Поля» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Йесод.Форма.Функции запускаФормПост» . Hackage.haskell.org . Проверено 25 октября 2012 г.
- ^ «Йесод.Формы.Типы» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «HaskellWiki — Аппликативный функтор» . Haskell.org . Проверено 24 октября 2012 г.
- ^ Jump up to: а б «Класс HasReps» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «RESTful контент» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Класс ToContent» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Подробнее о клиентской стороне Yesod: пример задачи» . Yesodweb.com. 23 апреля 2012 г. Проверено 23 октября 2012 г.
- ^ «Веб-сервис JSON» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Пакет Yesod-JSON» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ "книга - Виджеты" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Монада виджета» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Писательская монада» . Хаскелл.орг . Проверено 23 октября 2012 г.
- ^ «Шаблон Haskell Quasi-quotas» . Хаскелл.орг . Проверено 2 ноября 2012 г.
- ^ Jump up to: а б «книга — шекспировские шаблоны» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Модуль шаблона Гамлета» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Класс Text.Blaze.ToMarkup» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Класс Text.Cassius.ToCss» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Класс Text.Julius.ToJavascript» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Класс Text.Shakespeare.I18N.ToMessage» . Hackage.haskell.org . Проверено 24 октября 2012 г.
- ^ «Класс Текст.Шекспир.Текст.ToText» . Hackage.haskell.org . Проверено 24 октября 2012 г.
- ^ «Шаблон Хаскелла» . Haskell.org . Проверено 3 ноября 2012 г.
- ^ «книга — Шекспировские шаблоны #Вызов Шекспира» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ Jump up to: а б «Модуль шаблона Julius» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Рой язык» . Рой.brianmckenna.org . Проверено 23 октября 2012 г.
- ^ «Модуль шаблона Cassius» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Модуль шаблона Lucius» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Модуль шаблона Typescript» . Hackage.haskell.org . Проверено 10 октября 2018 г.
- ^ «Модуль шаблонов открытого текста Шекспира» . Hackage.haskell.org . Проверено 24 октября 2012 г.
- ^ "книга - Интернационализация" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ mkMessage
- ^ «Пакет Yesod-sitemap» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ «Пакет Yesod-Newsfeed для просмотров RSS/Atom» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ «Книга — Инициализация данных в основном типе данных» . Yesodweb.com . Проверено 26 мая 2014 г.
- ^ Jump up to: а б с "книга - Стойкая" . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ «Постоянный пакет Yesod» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Постоянные документы Yesod» . github.com . Проверено 16 октября 2018 г.
- ^ «Постоянный синтаксис объекта Yesod» . github.com . Проверено 16 октября 2018 г.
- ^ «Избыточные миграции для значений полей по умолчанию» . GitHub.com . Проверено 4 декабря 2012 г.
- ^ « Не более одной» мощности в постоянном типе Checkmark» . Hackage.haskell.org . Проверено 16 октября 2018 г.
- ^ «Как я могу создать ограничение внешнего ключа, используя Yesod/Persistent?» . stackoverflow.com . Проверено 16 октября 2018 г.
- ^ «пакет эскелето» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Пример запроса в» . Stackoverflow.com. 19 сентября 2012 г. Проверено 23 октября 2012 г.
- ^ «Пакет Йесод» . Hackage.haskell.org . Проверено 26 июня 2019 г.
- ^ «Пакет проверки электронной почты» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ «Пакет mime-mail» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ «Пакет Yesod-fb» . Hackage.haskell.org . Проверено 26 октября 2012 г.
- ^ Стек Haskell — Как установить
- ^ Пакет Yesod-bin со вспомогательным инструментом (с инструкциями по использованию с инструментом стека )
- ^ «книга — Развертывание вашего веб-приложения» . Yesodweb.com . Проверено 23 октября 2012 г.
- ^ Readme.Md. «Readme Йесод Кетер» . Гитхаб . Проверено 23 октября 2012 г.
- ^ «Кетер-пакет» . Hackage.haskell.org . Проверено 23 октября 2012 г.
- ^ «Обновления Кетера» . Yesodweb.com. 25 октября 2012 г. Проверено 25 октября 2012 г.
- ^ «Кетер: развертывание веб-приложений» . Yesodweb.com. 11 мая 2012 г. Проверено 23 октября 2012 г.
- ^ "Кетер: Он живой!" . Yesodweb.com. 17 мая 2012 г. Проверено 23 октября 2012 г.
- ^ «Параметры Javascript» . github.com . Проверено 12 марта 2014 г.
- ^ «Йесод, AngularJS и Фэй» . Yesodweb.com. 30 октября 2012 г. Проверено 12 марта 2014 г.
- ^ «HaskellWiki — проблема JavaScript» . Haskell.org . Проверено 12 апреля 2014 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Презентации: InfoQ , Haskell eXchange 2012.
- Слайды: ACM в Университете Джонса Хопкинса – ReST-сайты с Yesod
- ScreenCast: Yesod 1.0 на Vimeo
- Электронная книга О'Рейли - Разработка веб-приложений с помощью Haskell и Yesod - Веб-разработка, ориентированная на безопасность
- Вопросы и ответы: StackOverflow.com — Йесод пометил вопросы и ответы
Учебники в блогах
[ редактировать ]- FPComplete.com — мой первый веб-сайт , игра с маршрутами и ссылками
- Йесод для новичков
- hamberg.no - handlerToIO: используйте forkIO в обработчиках Yesod
Сравнения
[ редактировать ]- HaskellWiki — веб-фреймворки Haskell.
- Надеемся, честное и полезное сравнение веб-фреймворков Haskell
- Кентский университет – Сравнение динамических и статических языковых подходов к веб-фреймворкам – Yesod против Ruby on Rails
Другие языки
[ редактировать ]- Хаскелл Библиотека. - Йесод (на испанском языке) университет Кадисский