Как мне связать две базы данных и модели rails apps вместе?

#ruby-on-rails #ruby #postgresql #heroku

#ruby-on-rails #ruby #postgresql #heroku

Вопрос:

Итак, у меня есть сайт электронной коммерции, и мне было поручено связать мое приложение rails (4) с другим сайтом (нашего поставщика-производителя), чтобы показывать размещенные заказы и обновлять инвентарь с их стороны. Иначе говоря, мне нужно разделить базу данных и модели между двумя приложениями rails. Веб-сайт поставщика создан не просто так, к вашему сведению, мне приходится создавать его с нуля.

Примечание: Я знаю, что пользовательская панель администратора была бы проще, но мой босс, который совсем не разбирается в технологиях, похоже, непреклонен в размещении их по отдельным URL, хотя он владеет обеими компаниями, той, в которой я работаю, и компанией-производителем.

Возможно, мне нужна просто дорожная карта или просто точка в правильном направлении, потому что я не совсем уверен, что я ищу. Просто немного надежной информации о том, как это сделать.

В настоящее время я использую heroku и AWS для своего существующего приложения rails. Я использую PostgreSQL в качестве своей базы данных.

Ответ №1:

Вам нужно будет использовать establish_connection

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

Я бы настроил запись в database.yml для базы данных поставщика (возможно, по одной для каждой среды)

Тогда у меня была бы базовая модель поставщика, от которой наследуют все остальные

 class VendorApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "vendor_#{ Rails.env }"
end
  

Предполагая, что вы настроили database.yml на наличие vendor_development и т. Д.

Ответ №2:

Совместное использование базы данных очень просто. На самом деле, это то же самое, что не использовать общую базу данных. Вы просто вводите соответствующую конфигурацию в database.yml и объявляете модели.

Теперь вы можете подумать: «Эй, это дублирование кода! Почему бы мне просто не извлечь модели в gem или что-то в этом роде?». На что я говорю, не надо. Просто дублируйте то, что необходимо. Очень вероятно, что в одном приложении вам понадобятся полномасштабные модели с проверками, перехватами before / after_save и еще много чего. А другое приложение будет только считывать данные, поэтому ему не нужна какая-либо дополнительная сложность.