Какой смысл заморозить версию Rails/драгоценные камни?

Что это значит?

В инструкциях для проекта он сказал, чтобы "заморозить драгоценности Rails". Разве это не отличается от замораживания версии Rails?

Что замерзает?

Ответ 1

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

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

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

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

Ответ 2

Я думаю, что Филк ударил ноготь по голове своими комментариями.

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

Это может быть что-то незначительное или что-то, что мешает вашим пользователям выполнять свою работу.

Просто google 'rails gem update breaks my app', чтобы увидеть некоторые хвосты горе.

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

Вы можете заморозить Rails, вы можете заморозить драгоценные камни, вы можете установить зависимость от конкретной версии gem в файле environment.rb.

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

Ответ 3

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

Однако это может быть проблематично для таких программ, как rake и capistrano, которые не запускаются в среде Rails. У них есть собственный путь загрузки драгоценных камней, на которые вы можете повлиять, но вам нужно знать об этом. Кроме того, жемчуг с собственными расширениями (libxml, hpricot,...) не может быть заморожен, потому что бит, специфичный для ОС, по-прежнему должен жить во внешней ОС.

Кроме того, возможно, сейчас не проблема, но что-то, о чем нужно знать - Rails 3 будет переходить к новому методу управления плагинами, драгоценными камнями и каталогом поставщиков в целом. На данный момент все это беспорядок.

Ответ 4

Вот учебник, который идет на замораживание приложения rails.