2016-07-21 3 views
0

Я следую этому руководству по созданию Rails Engines, и мне интересно узнать, нужно ли мне перечислять все зависимости моего хоста (я создаю механизм Rails под названием admin внутри большего Rails-приложения) внутри файла gem Engine. видимо, к мотору можно получить доступ через жемчужину). Зачем мне это нужно?Rails миграции двигателей, дампа схемы и зависимостей.

Также почему двигатель нуждается во всех миграциях хоста? Или нужен ли только движок для миграции, относящейся к файлам, которые я перехожу к движку?

ответ

1

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

Если ваш двигатель, зависит от модели под названием Admin, то она должна включать в себя шаблон миграции для создания таблицы admins и 100% кода, необходимого для взаимодействия с Admin с. Шаблон миграции будет скопирован в папку db/migrations хоста и продолжен вместе с другими его миграциями. Не добавляйте миграции в сам движок, потому что он не сможет запустить их, когда он находится внутри хоста. Помните: двигатель не может знать ничего внутреннего для хоста, включая его схему базы данных.

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

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

Это сложнее, чем кажется, но есть отличные примеры двигателей, за которыми вы можете следовать. Проверьте RailsAdmin и Devise на высококачественные образцы организации кода, управления данными и тестирования.

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

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

+0

Вы пишете «Если ваш двигатель зависит от модели под названием« Администратор », он должен содержать шаблон миграции для создания таблицы админов и 100% кода, необходимого для взаимодействия с администраторами. Шаблон миграции будет скопирован в db хоста/migrations и запускаться вместе со своими другими миграциями. Не добавляйте миграции в сам движок, потому что он не сможет запустить их, когда он находится внутри хоста. Помните: движок не может знать ничего внутреннего для хоста, включая его схемы базы данных. ". Так должен ли двигатель включать шаблон миграции для таблицы admins или нет? – Jwan622

+0

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

Смежные вопросы