Рельсы - 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/
Возможно, есть более простые способы решения проблемы, с которой вы сталкиваетесь, но вам нужно будет опубликовать более подробную информацию о сценарии использования, чтобы мы могли дать вам более точные рекомендации.