2016-07-24 3 views
0

всякий раз, когда возникает какая-то серьезная проблема с рельсами, иногда ее настоящая боль для обновления существующих приложений для рельсов (4.x, 5.x и т. Д.), Учитывая, что существует множество драгоценных камней, которые могут зависеть от более старых версий рельсов (ActiveRecord, ActionController, ActiveModel и т. Д.). И эти зависимые драгоценные камни иногда требуют слишком много времени для обновления (либо не поддерживаются, неактивны, либо недоступны команде основного помощника, даже для принятия запросов Pull). Каково решение, за которым следуют люди?Каковы наилучшие методы обновления версий рельсов со всеми зависимостями?

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

ответ

3

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

Бета-версии Rails 5 были доступны почти за 6 месяцев до выпуска Rails 5. Если драгоценный камень не обновляется в течение этого времени, он, вероятно, не будет обновлен позже или он будет замедляться при каждом обновлении Rails.

Я вижу несколько вариантов, когда вы бежите в этой ситуации:

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

  • Существуют ли другие проекты, которые решают одну и ту же проблему. Иногда эти проекты даже имеют лучшую структуру или другие преимущества. Вы можете подумать о том, чтобы переключиться на эти драгоценные камни. Надеюсь, вы инкапсулировали старый драгоценный камень и не слишком сильно настраивали этот драгоценный камень, потому что это сложнее заменить его.

  • Вы можете подумать о том, чтобы развернуть этот драгоценный камень и решить проблему самостоятельно (бонусные баллы за отправку запроса на извлечение оригинального драгоценного камня). Это хорошее решение в краткосрочной перспективе. Но вам очень понравится аналогичная проблема с этим камнем со следующей версией Ruby. Кроме того, когда вы работаете с раздвоенной версией драгоценного камня, вы сами по себе. Вы действительно хотите сохранить эту частную версию gem в течение следующих лет?

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

Там могут быть некоторые вещи, которые вы можете сделать заранее, чтобы уменьшить боль, когда вы столкнетесь с ситуациями, как это:

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

  • Инкапсулируйте этот камень с собственной оберткой. И получите хорошее покрытие для вашего интерфейса оберток. Это значительно облегчает изменение основного драгоценного камня.

  • Всегда будьте готовы удалить/заменить драгоценные камни, как только вы столкнетесь с проблемой с ними. Ожидание внешнего хранителя драгоценных камней, вероятно, не является хорошей стратегией, когда у вас есть проблемы в вашем приложении для решения.

+0

+1 Я полностью согласен с большинством пунктов вы сказали, но держать кран на хрупких обновлений драгоценных камней и убедившись, что ваш граф зависимостей всегда в актуальном состоянии действительно отнимает много времени. В немногих случаях его легко переписывать несколько вещей, а не добавлять драгоценный камень в зависимость, но в большинстве случаев это похоже на повторное создание колеса, когда кто-то уже решает проблему (я слишком против камней для очень маленьких целей) , Когда вы работаете над клиентскими проектами, большую часть времени вы работаете в сжатые сроки, и вам нелегко делать большую часть материалов самостоятельно. Позволяет услышать, что говорят другие. – r3bo0t