Рельсы - postgres вызвать действие методом?

Я создаю новое приложение rails, которое работает с той же базой данных postgres, что и мой API.

API и приложение имеют пары общих моделей.


Пример:

API и приложение имеет Connection модель

Приложение создаст простое connection в БД и API сделает все остальное (как обработчик, использующий connection для многих вещей)


Поэтому я хотел использовать Hair Trigger, который позволял запускать вставку БД, или обновлять ее, чтобы она соответствовала поведению БД, которое будет выполняться.

Но я хотел бы выполнить метод от одного из моих помощников.

как это:

class Connection < ActiveRecord::Base

 trigger.after(:insert) do
   SomeObject.method()    
 end

end

Я не могу использовать after_create потому что действие создания не выполняется на том же сервере (но той же БД)

есть идеи?

Спасибо!

1 ответ

Причина, по которой Hair Trigger поддерживает только SQL, заключается в том, что он помогает поддерживать триггеры базы данных ( https://www.postgresql.org/docs/9.6/static/sql-createtrigger.html).

Триггеры базы данных отделены от вашего приложения и смогут запускать только SQL внутри вашей базы данных. На самом деле он не сможет вызвать какой-либо код внутри вашего приложения.

Решением вашей проблемы было бы использование событий. Если вы когда-либо работали с Javascript, возможно, вы уже сталкивались с Event и EventListener. Цель событий - развязать ваш код. Одна часть вашего приложения отправляет событие, когда действие было предпринято, например, что-то было вставлено в базу данных. Другие части вашего приложения могут подписаться на эти события и предпринять необходимые действия.

Поскольку вы работаете с Rails, я бы посоветовал вам поближе взглянуть на драгоценный камень Wisper (github.com/krisleech/wisper). Если ваше приложение и API; Как вы описываете, живет в разных процессах (или серверах), вы должны изучить использование фонового работника для асинхронной обработки событий. Распространенным подходом к этому является использование Sidekiq Wisper (github.com/krisleech/wisper-sidekiq), который позволяет вам запускать события асинхронно, используя Sidekiq в качестве фонового работника.

Для хорошего ознакомления с предметом, вот руководство, чтобы вы начали (я не автор): http://www.g9labs.com/2016/06/23/rails-pub-slash-sub-with-wisper-and-sidekiq/

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

Другие вопросы по тегам