2012-06-11 6 views
1

Я новичок в Haskell и Snap, и я хочу написать простое приложение для отслеживания ошибок. Я создал проект Snap, используя $ snap init, и он работает. Проблема в том, что я не знаю, как идти дальше.Где я могу поставить свои снимки?

Я хочу создать привязку Tickets, которая использует базу данных для хранения отчетов об ошибках и использует эту привязку в моем основном веб-приложении.

Я прочитал документацию о привязках, но я не мог понять, где разместить исходный код (в каталоге /snaplets, я полагаю? Если да, то как его загрузить?). Может ли кто-нибудь указать мне в правильном направлении?

ответ

5

Возможно, вам нужно создать отдельный ярлык для билетов? Snaplet infrasructure предназначен для многоразового использования компонентов, таких как управление сессиями, аутентификация, доступ к базам данных, администратора панели, управление пользователями и т.д.

Вы собираетесь использовать билеты на автономный модуль через несколько веб-приложений? Если это так, то непременно вперед и создайте привязку.

В любом случае, это звучит так, как будто вы, по крайней мере, частично спрашиваете, как организовать проект с несколькими «модулями» или «частями» при использовании оснастки. Я попытаюсь обратиться к этому ниже. Пожалуйста, дайте мне знать, если вы чувствуете, что я пропустил отметку.

Предполагая, что вам не нужно создавать отдельный snaplet для Билеты:

Для функциональности, специфичной к одному сайту, я думаю, вы бы лучше создать несколько модулей и разработки кода для функциональности прямо внутри пакета вашего текущего приложения и иерархии модулей. Вот несколько моментов, о том, как я организовывал мои поспешные проекты поздно:

  • Я кладу базы данных, связанные коды под модулями в MyApp.DB. именах. У вас может быть MyApp.DB.Tickets, который содержит все вызовы базы данных , необходимые для работы в вашем модуле Tickets.

  • Я поместил всю функциональность, связанную с пользовательским интерфейсом, под доменом MyApp.UI.. Вы можете поставить модуль MyApp.UI.Tickets, который содержит Handlers, ваш Splices, ваш Forms и так далее.

  • Для обработки форм я использую отличную библиотеку digestive-functors. Вы можете найти это blog post полезным, если вы не знаете их уже.

  • Обычно у меня есть общая библиотека вспомогательного интерфейса под MyApp.UI.Helpers, где я размещаю общий код, используемый для всех/большинства модулей пользовательского интерфейса.

  • Я обычно имеют общую форму вспомогательную библиотеку под MyApp.UI.Forms

  • Любой код по касательной к тому, что мое приложение выставляет веб-интерфейс выходит за пределы MyApp.UI. имен. Поэтому, если моему приложению необходимо выполнить некоторые автономные анализы, я могу разместить их под пространством имен MyApp.Analysis..

После того, как вы определяете и экспортировать Обработчик под MyApp.UI.Tickets, вы можете пойти в файл Site.hs и подключить их в приложение на конкретных маршрутах.

Для вдохновения о том, как обращаться с соединениями с базой данных, вы можете проверить postgresql-simple snaplet.

Однако, если вам нужно создать snaplet:

snaplet это просто автономное приложение, которое использует Snap.Snaplet инфраструктуру, (обычно) имеет свой собственный .cabal файл и (обычно) является его собственный пакет Haskell. Snap затем дает вам путь к embed или гнездо это повторно используемое автономное приложение в еще одном приложении для оснастки. Подумайте об иерархии Russian dolls.

Предполагая, что вы выполнили что-то похожее на то, что я описал в разделе выше, вы теперь готовы на 95% для преобразования в привязку. Просто назовите свое приложение snaplet-tickets, выставьте SnapletInit, используя makeSnaplet, и используйте nestSnaplet в другом приложении для привязки, чтобы включить эту функцию многократного использования.

+0

Так что, если я хочу создать привязку, я бы создал новое приложение * snaplet-tickets * и выставил его с помощью 'makeSnaplet'. Как я буду использовать его в своем основном приложении? Я устанавливаю его с помощью cabal, а затем «импортирую» его? –

+1

Да, если у вас действительно есть многоразовый компонент, который вы хотите сделать в snaplet, я бы поместил его в свой собственный проект. Мои снимки [snaplet-postgresql-simple] (https://github.com/mightybyte/snaplet-postgresql-simple) (еще не взломанный) и [snaplet-acid-state] (https://github.com/mightybyte/snaplet-acid-state) - примеры того, как это сделать. – mightybyte

Смежные вопросы