Возобновить основные модели приложений и базу данных с другими приложениями рельсов - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть приложение rails (3) (Master), в котором есть схема, модели и база данных. Также у меня есть еще одно приложение (сервис) rails (5), у которого нет моделей, но я использую (главное) базу данных приложения.

настройка приложения службы

common_db:
  adapter: postgresql
  database: 'blog'
  username: 'username'
  password: 'password'
  host: 'localhost'
  pool: '10'

application_record.rb

 class ApplicationRecord < ActiveRecord::Base
   self.abstract_class = true
   establish_connection     
   Rails.configuration.database_configuration["common_db"]
 end

затем я добавил одну и ту же модель в сервисное приложение, затем пытался получить некоторые значения из основного приложения

class post < ApplicationRecord
    has_many :comments
    scope :article_comments, lambda { |a| select("created_at").joins('INNER JOIN comments on post.id = comments.post_id').where('article_id = ?', 
    a) }
end

и если я позвоню Post.article_comments , здесь это присоединяется, и все не работает, абсолютно это не будет работать, поскольку у нас нет никаких ассоциаций или моделей в сервисном приложении.

В основном мой вопрос

1) можно ли повторно использовать эту основную модель базы данных с приложением-службой?

2) Если я могу использовать это, то могу ли я использовать его со всеми ассоциациями Пример: Blog.comments в сервисном приложении .....

3) Также есть ли другой хороший подход, чтобы использовать это снова, также я видел некоторые статьи https://hiltmon.com/blog/2013/10/14/rails-tricks-sharing-the-model/, это будет хорошо для всех?

Ответы [ 4 ]

0 голосов
/ 10 ноября 2018

Буквально следуйте инструкциям в статье, которую вы связали. Ваши мастер-модели должны быть отражены в вашем сервисном объекте. Вы столкнетесь с некоторыми икотами, так как имеете дело с Rails 5 против 3 (например, в новейшей версии 5.2 предполагается, что должен присутствовать assign_to [встроенная проверка]).

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

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

0 голосов
/ 06 ноября 2018

1) Да, вы можете повторно использовать основную модель базы данных с помощью сервисного приложения (это действительно легко сделать в Heroku).

2) Да, вам нужно добавить модели, чтобы отношения существовали, вам не нужны все ваши модели, но это может вызвать некоторые проблемы (например, запуск области, которую вы объявляете в модели поста, где вам нужна модель комментария).

3) Предоставленная вами ссылка - это хороший способ убедиться, что ваши модели обновлены. Вы также можете написать грабли в своем главном приложении, чтобы обновить модели и запускать их каждый раз, когда вы делаете коммит.

0 голосов
/ 07 ноября 2018

Чтобы ответить на ваши вопросы, да, все, что вы спрашиваете, возможно, как ответил Ремигио Аренас Муньос де Кот.

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

Эта статья может объяснить более подробно, чем я мог бы сделать здесь: http://www.akitaonrails.com/2016/10/03/sharing-models-between-rails-apps-part-1

Надеюсь, это поможет.

0 голосов
/ 04 ноября 2018

Помните, что отношения устанавливаются в моделях, вы можете иметь одну и ту же базу данных, но для этого нужно иметь модели с отношениями там.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...