Двигатель должен быть полностью независим от хоста. Он изолирован в коде и данных и должен иметь возможность забрасывать любым хостом и работать одинаково. Это означает, что двигатель не имеет каких-либо особых знаний о внутренней работе своего хоста, и хост не имеет специальных знаний о внутренних функциях двигателя.
Если ваш двигатель, зависит от модели под названием Admin
, то она должна включать в себя шаблон миграции для создания таблицы admins
и 100% кода, необходимого для взаимодействия с Admin
с. Шаблон миграции будет скопирован в папку db/migrations
хоста и продолжен вместе с другими его миграциями. Не добавляйте миграции в сам движок, потому что он не сможет запустить их, когда он находится внутри хоста. Помните: двигатель не может знать ничего внутреннего для хоста, включая его схему базы данных.
Настоятельно рекомендую вам создавать и поддерживать это разделение. Это сэкономит вам огромные головные боли в будущем.
Внутри двигателя вам необходимо включить все зависимости и код только для двигателя. Не добавляйте зависимости или код, необходимые для хоста, потому что движок не может знать о них.
Это сложнее, чем кажется, но есть отличные примеры двигателей, за которыми вы можете следовать. Проверьте RailsAdmin и Devise на высококачественные образцы организации кода, управления данными и тестирования.
Тестирование важно. Чтобы ваш движок фактически отображал страницы или взаимодействовал, вам может потребоваться включить такие зависимости, как Rails. Вы можете это сделать, но обязательно добавьте их как зависимостей разработки к вашему Gemfile. См. Вышеупомянутые проекты для примеров того, как это сделать.
Я рекомендую вам создать свой двигатель вне вашего проекта-хозяина, потому что это заставит вас писать тесты, которые не зависят от приложения-хозяина. Если ваш движок проверен и хорошо работает сам по себе, он отлично подойдет, когда вы его запустите в свой хост.
Вы пишете «Если ваш двигатель зависит от модели под названием« Администратор », он должен содержать шаблон миграции для создания таблицы админов и 100% кода, необходимого для взаимодействия с администраторами. Шаблон миграции будет скопирован в db хоста/migrations и запускаться вместе со своими другими миграциями. Не добавляйте миграции в сам движок, потому что он не сможет запустить их, когда он находится внутри хоста. Помните: движок не может знать ничего внутреннего для хоста, включая его схемы базы данных. ". Так должен ли двигатель включать шаблон миграции для таблицы admins или нет? – Jwan622
@ Jwan622 да, вы должны добавить шаблон миграции, но не сам перенос. Вы можете включить задачу рейка, чтобы скопировать шаблон в хост-приложение, а затем хозяин может выполнить фактическую миграцию. – piersadrian