# Кэш Elixir

Tuist повторно использует скомпилированные зависимости локально и в сборках CI. Включите его один раз, а затем продолжайте использовать `mix compile` и `mix test`.

## Настройка

Выполните <.localized_link href="/guides/get-started/elixir-project#set-up-tuist">Начало работы с Elixir</.localized_link> один раз. Общая настройка включает кэширование зависимостей вместе со сборкой и аналитикой тестов; дополнительная настройка кэша не требуется.

`cache: true` автоматически выбирает поддерживаемые зависимости Hex и Git; вам не нужно перечислять их вручную. Нативная/пользовательская компиляция и локальные зависимости продолжают обрабатываться через Mix как обычно. Исходные файлы вашего приложения не кэшируются.

## Собирайте как обычно

```sh
mix compile
mix test
```

Когда зависимость требует компиляции, Tuist проверяет локальный кэш, а затем общий удаленный кэш. При промахе компиляция выполняется обычным образом, а результат сохраняется для будущих сборок. Выбранные поддерживаемые зависимости, которые Mix считает актуальными, учитываются как локальные попадания, если их скомпилированные артефакты присутствуют и действительны; обращение к кэшу не требуется. Если аутентификация или кэш недоступны, Mix все равно выполняет компиляцию в обычном режиме.

## Просмотр попаданий в кэш

Откройте раздел **Mix Cache** на панели управления проектом, чтобы увидеть процент попаданий, объем переданных данных и недавние сборки. Выберите вкладку **Mix cache** конкретной сборки, чтобы увидеть, какие задачи попали в кэш, а какие нет. Раздел **CAS Outputs** показывает фактические удаленные загрузки и выгрузки; локальные попадания не создают записей об удаленной передаче данных. Повторное использование уже актуальных артефактов увеличивает процент попаданий, но не приводит к передаче байтов, задержкам восстановления или экономии времени.

Чтобы проверить восстановление, очистите скомпилированные артефакты поддерживаемой зависимости и выполните сборку снова:

```sh
mix deps.clean nimble_options --build
mix compile
```

Замените `nimble_options` на зависимость, которую использует ваш проект и которая уже заполнила кэш. Сохраняйте те же настройки окружения Mix и компилятора.

## Настраивайте только при необходимости

В большинстве проектов можно оставить `cache: true`. Для исключений используйте список ключевых слов:

```elixir
tuist: [
  project: "your-account/your-project",
  cache: [exclude: [:a_dependency_with_compile_time_side_effects]]
]
```

- **Дополнительные входные данные времени компиляции:** объявите внешние файлы с помощью `inputs: ["schemas"]` и переменные окружения с помощью `env: ["COMPILER_OPTION"]`.
- **Только локально:** установите `remote: false`.
- **Без удаленных выгрузок:** установите `upload: false`. Доступ по-прежнему контролируется разрешениями сервера.
- **Отключить кэширование:** установите `cache: false`.

> [!IMPORTANT]
> Компиляция может выполнять произвольный код Elixir. Объявляйте дополнительные входные данные и исключайте зависимости, чей код или побочные эффекты, зависящие от времени или сети, должны выполняться при каждой сборке. Кэшированные артефакты могут содержать секреты, а процессы записи в кэш являются доверенными производителями кода: не предоставляйте учетные данные для записи в кэш недоверенным задачам.

Сведения о выборе зависимостей, повторном использовании при разных путях извлечения, устранении неполадок и деталях реализации см. в <.localized_link href="/guides/features/cache/elixir-advanced">расширенной настройке кэша для Elixir</.localized_link>.
