ublog

Знайомство з n2o - 3

programming [33]erlang [32]n2o [17]postgresql [9]

Вітаю!

n2o "з коробки" вміє працювати з mnesia та riak,
Проте що нам робити, якщо ми хочемо зберігати/діставати дані в postgresql?
Зараз ми це з'ясуємо!

раніше ми уже додали epgsql ( https://github.com/epgsql/epgsql ) в deps,
зараз навчимось працювати з цим erlang-драйвером для postgresql

Наше тестове завдання -
маємо таблицю test.sql з переліком міст
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/test.sql ),
нам потрібно зробити функціонал виводу даних,
редагування, видалення та добавлення нових даних.
(для початку реалізуємо вивід та добавлення)

створимо модуль pg.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/pg.erl ) ,
у якому ми підключимось до субд та пропишемо обгортки для наших запитів та транзакцій
у випадку з підключенням напряму до postgresql - порт 5432, використовуючи pgBouncer - порт 6432
(не забудьте прописати власні налаштування для підключення до субд - користувач, пароль, назва_бази)

створимо модуль pq.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/pq.erl ) , у якому ми пізніше пропишемо потрібні нам запити до бази даних

в routes.erl ( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/routes.erl )
пропишемо обробник нашої адреси ( https://ваш.домен/testcities/ - це і буде наша сторінка)
та створимо модуль testcities.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/testcities.erl )

розглянемо як працює цей модуль -
1) при GET-запиті від браузера сторінки, обробником котрої є даний модуль -
виконується функція main() - формується сторінка з шаблонів, віддається браузеру
2) встановлюється websockets-з'єднання,
виконується функція event(init) -
в даному випадку ми тут викликаємо іншу функцію - event({client,{sitiesshow}}) , котра дістає з бази даних список міст та додає їх на сторінку
3) після власне після встановлення websockets-з'єднання ми можемо ганяти дані між браузером і сервером по вебсокетах


(комміт https://github.com/221V/my_n2o_app/commit/8d5e702d92f61e6c30bbecba2b47058f1ec1efc2 )

Далі буде (редагування, видалення записів, postgresql-транзакції, визначення мови, простий спосіб мультимовності та інше) ..