#ruby-on-rails #version
#ruby-on-rails #версия
Вопрос:
Я создал приложение rails, используя rails 5 и ruby 2.3.
Я хочу добавить несколько изменений в некоторые файлы моделей и сохранить их как новое приложение. Я хочу, чтобы два приложения запускали оба приложения в рабочей среде как два похожих приложения. Я знаю, как версифицировать контроллер с помощью пространства имен, но я не получил решения для моделей версии rails.
Ответ №1:
Вы хотите сказать, что хотите запустить две копии приложения в рабочей среде в разных пространствах имен (например, / v1 / и / v2/), которые используют одну и ту же базу данных?
Простого способа нет, потому что это плохая идея. Каждый раз, когда вы переходите к одному приложению, вам придется помнить об изменении обоих — и хуже, если вы добавите больше версий в будущем.
Если возможно, вы должны использовать одну кодовую базу и поместить любую логику управления версиями в контроллер, который обращается к модели. Ваш контроллер может проверить маршрут, который использовался для его попадания (/ v1 / или / v2/), и отреагировать соответствующим образом.
Чтобы разделить одну базу данных между двумя версиями вашего кода, вам нужно убедиться, что любые изменения, которые вы вносите в схему базы данных, совместимы в обратном и прямом направлениях, что означает, что вы можете добавлять только новые таблицы или столбцы (никогда не переименовывайте и не удаляйте).
Если вам не нужно, чтобы две версии вашего приложения совместно использовали одну и ту же базу данных, вы можете предоставить новой версии собственную копию базы данных ( database: my_schema_v2
in config/database.yml
).
Или вы могли бы присвоить версии v2 вашей модели собственное имя таблицы:
class Product < ApplicationRecord
self.table_name = "products_v2"
end
Но опять же, это означает, что продукты не будут использоваться совместно между старой и новой версиями вашего кода.