Как лучше всего обрабатывать в основном статические данные, которые я хочу использовать во всех моих средах с Rails? - PullRequest
4 голосов
/ 23 сентября 2011

Скажем, например, я управляю приложением Rails со статическим содержимым, которое актуально во всех моих средах, но я все еще хочу иметь возможность изменять при необходимости. Примеры: состояния, вопросы для викторины, сорта вина и т. Д. Есть связь между вашим пользовательским контентом и этими статическими данными, и я хочу иметь возможность изменять его в реальном времени, если это необходимо, поэтому он должен храниться в базе данных.

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

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

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

Способ, которым я конкретно занимался, состоит в том, чтобы обновлять файлы своих тестовых данных с хорошими данными (что дает побочный эффект, позволяющий мне писать более реалистичные тесты) и повторно импортировать их при необходимости. Я делаю это с connection.execute "some SQL", а не с моделями, потому что я обнаружил, что Model.reset_column_information + куча Model.create иногда срабатывает, если все сразу обновляются, но в конечном итоге взорвется мне в лицо, когда я скажу, чтобы подтолкнуть, скажем, несколько недель спустя, потому что у меня будут более новые проверки модели, которые будут конфликтовать с двухнедельной миграцией.

В любом случае, я думаю, что этот процесс YAML + SQL работает немного меньше, но я также нахожу его довольно хитрым. Мне было интересно, как люди управляют такими данными. Есть ли другие трюки, доступные прямо в Rails? Существуют ли драгоценные камни для управления статическими данными?

1 Ответ

0 голосов
/ 23 сентября 2011

В приложении, с которым я работаю, мы используем концепцию, которую мы называем «DictionaryTerms», которая работает как поиск значений. Каждый термин имеет категорию, к которой он принадлежит. В нашем случае это демографические термины (отсюда и данные на скриншоте), в том числе термины, связанные с полом, расой и местоположением (например, государством).

enter image description here

Затем вы можете использовать типичные действия CRUD для добавления / удаления / редактирования словарных терминов. Если вам нужно перенести термины между средами, вы можете написать задачу rake для экспорта / импорта данных из одной базы данных в другую через файл CSV.

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

...