У меня есть рецепт шеф-повара, который запускает миграцию в opsworks. Он запускает php artisan migrate —force на каждом сервере. Есть ли способ запустить миграцию только один раз на первом сервере, к которому он счастлив? У меня есть 3 онлайн в любое время.
Короткий ответ:
Добавьте тег или атрибут и используйте его в качестве защиты для выполнения.
Вы по-прежнему можете иметь состояние гонки и выполнения на нескольких серверах, так как индекс обновляется каждую минуту (приблизительно) на стороне chef-сервера.
Длинный ответ:
Вы должны использовать что-то, чтобы сохранить состояние, что угодно, от zookeeper до любого легко обновляемого источника правды, может заполнить этот пробел, без каких-либо подробностей в вашей среде любой ответ будет оценен тем, что лучше для ответчика. Голосование закрыто, так как прежде всего основано на мнении.
Вы всегда можете создать новый «служебный» слой (пользовательский тип слоя), который имеет только один рецепт, который вам нужен, и прикрепить к нему только один экземпляр.
Таким образом, у вас будет основной слой с 3 экземплярами и остальными рецептами, и один из экземпляров также будет принадлежать дополнительному слою.
Вы можете прикрепить экземпляр к слою, перейдя в «экземпляры», а затем «добавить новый экземпляр» и щелкнув вкладку «Существующие экземпляры». Единственная проблема заключается в том, что вы не можете прикрепить работающий экземпляр к слою, вместо этого вы должны остановить его, затем присоединить и перезапустить.
Примечание: если вам нужно выполнить эту команду после развертывания, убедитесь, что вы перечитали свои обычные рецепты развертывания на шаге «развернуть», иначе вы рискуете, что ваш рецепт будет не в правильном порядке в списке шеф-повара run_list.