Одним из основных преимуществ Crystal является то, что его двоичные файлы могут быть статически связаны. Это означает, что все зависимости программы от времени выполнения включены в сам двоичный файл. Если бы вместо этого двоичный файл был динамически связан, пользователю потребовалось бы установить эти зависимости для использования программы. Аналогично, поскольку он компилируется в один двоичный файл, его распространение значительно упрощается, поскольку не требуется включать исходный код.
В этой главе мы рассмотрим следующие темы:
• Управление версиями вашего сегмента
• Создание рабочих двоичных файлов
• Распространение вашего двоичного файла
К концу этой главы у вас будет портативный и производительный двоичный файл, который можно будет распространять среди конечных пользователей вашего приложения.
Технические требования
Требования к этой главе следующие:
• Рабочая установка Crystal
Пожалуйста, обратитесь к
Все примеры кода для этой главы можно найти в папке
Управление версиями вашего shard
Первое, что вам нужно сделать, прежде чем вы сможете развернуть проект, — это создать новый выпуск. Как вы узнали из
По этой причине любое несовместимое с обратной совместимостью изменение в общедоступном API должно привести к созданию новой основной версии сегмента. Примером этого может быть переименование метода, удаление метода, изменение имени параметра метода и т. д. Однако код может быть признан устаревшим как часть второстепенной версии с указанием, что он будет изменен/удален в следующей основной версии.
Crystal предоставляет аннотацию https://crystal-lang.org/api/Deprecated.html, которую можно использовать для создания предупреждений об устаревании при применении к методам или типам. В некоторых случаях программе может потребоваться поддержка нескольких основных версий сегмента одновременно. Эту проблему можно решить, проверив версию сегмента во время компиляции, а также некоторую условную логику для генерации правильного кода на основе текущей версии.
Константа VERSION
доступна во время компиляции и является хорошим источником информации о текущей версии сегмента. Ниже приведен пример:
module MyShard
VERSION = "1.5.17"
end
{% if compare_versions(MyShard::VERSION, "2.0.0") >= 0 %}
puts "greater than or equal to 2.0.0"
{% else %}
puts "less than 2.0.0"
{% end %}
Если требуется несколько диапазонов версий, можно добавить дополнительные ветки.
Релиз — это не что иное, как тег Git для конкретного коммита. Как создать релиз, зависит от того, какой хост вы используете. Инструкции о том, как это сделать для вашего конкретного хоста, см. по следующим ссылкам:
• https://docs.gitlab.com/ee/user/project/releases/#create-a-release
Тег выпуска должен начинаться с буквы v — например, v1.4.7, а не 1.4.7.
Прежде чем создавать выпуск, вам следует убедиться, что вы обновили все ссылки на версию в исходных файлах, например, в VERSION
.
Если проект представляет собой библиотеку, то это все, что нужно. Другие приложения смогут использовать новую версию, shards install
или shards update
, в зависимости от того, является ли это новой или существующей зависимостью. Если проект представляет собой приложение, необходимо выполнить еще несколько шагов, чтобы пользователи могли загружать готовые двоичные файлы для его использования.
Создание производственных двоичных файлов