Вопрос или проблема
У меня уже есть проект на React Native, и я настроил CI/CD для него, используя Azure DevOps. Но теперь, когда я обновился до новой архитектуры 0.76, он не смог выполнить pod install.
Мой скрипт для pod install:
(У меня уже есть скрипт для bundle install в этом файле)
- script: |
export RUBY_THREAD_VM_STACK_SIZE=1000000
export RCT_NEW_ARCH_ENABLED=1
bundle exec pod install
displayName: 'iOS | Установка пакетов CocoaPods с новой архитектурой'
workingDirectory: '$(Build.SourcesDirectory)/ios'
condition: ne(variables['cache_pods_restored'], 'true')
И ошибка:
bundler: не удалось загрузить команду: pod (/Users/runner/work/1/s/vendor/bundle/ruby/3.3.0/bin/pod)
SystemStackError: слишком глубокий уровень стека
/usr/local/lib/ruby/site_ruby/3.3.0/rubygems/stub_specification.rb:230:in `loaded_spec'
/usr/local/lib/ruby/site_ruby/3.3.0/rubygems/stub_specification.rb:186:in `spec'
Я смог собрать приложение на моем Mac, но не смог собрать его на AzureDevOps.
Можете помочь мне?
- activesupport 7.0.8.6
- ruby 3.3.0
- algoliasearch 1.27.5
- cocoapods-core 1.14.3
Ответ или решение
Судя по вашему описанию, вы столкнулись с проблемой при выполнении команды pod install
после обновления проекта React Native до новой архитектуры (New Architecture) версии 0.76. Ошибка SystemStackError: stack level too deep
указывает на возможные проблемы с зависимостями или конфигурацией вашего Ruby-окружения на Azure DevOps.
1. Анализ проблемы
Прежде всего, ошибка "stack level too deep" часто связана с рекурсивными вызовами методов, что может происходить в результате неправильной инициализации библиотек или конфликтов зависимостей. В вашем случае это может быть связано с версией Ruby, установленной на вашем CI/CD сервере Azure DevOps, или с несовместимостью между вашими Ruby гемами.
На основании версии вашего Ruby (3.3.0) и Bundler (не указана, но предположим, что она последняя), а также указанных гемов (ActiveSupport 7.0.8.6, cocoapods-core 1.14.3) можно сделать следующее:
2. Варианты решения проблемы
Проверка и обновление зависимостей
-
Убедитесь в совместимости гемов: Проверьте документацию для
CocoaPods
и других гемов на предмет совместимости с вашей версией Ruby. Возможно, вам потребуется понизить версию Ruby или обновить версии гемов. -
Очистите кэш: В некоторых случаях конфликтующие или устаревшие данные в кэше могут вызывать проблемы. Добавьте в ваш скрипт команды для очистки кэша:
pod cache clean --all
Оптимизация скрипта
Ваш скрипт для установки CocoaPods выглядит корректным, однако вы можете попробовать оптимизировать его:
- script: |
export RUBY_THREAD_VM_STACK_SIZE=1000000
export RCT_NEW_ARCH_ENABLED=1
gem install bundler # Обновляем Bundler до последней версии
bundle install # Убедитесь, что все гемы установлены
bundle exec pod install
displayName: 'iOS | Установка пакетов CocoaPods с новой архитектурой'
workingDirectory: '$(Build.SourcesDirectory)/ios'
condition: ne(variables['cache_pods_restored'], 'true')
Локальные тесты
Поскольку вы смогли успешно выполнить сборку на локальной машине, рекомендуется:
- Убедитесь, что локальное окружение (Ruby, Bundler, CocoaPods и другие зависимости) совпадает с CI/CD окружением Azure DevOps.
- Если возможно, создайте Docker-образ с вашими зависимостями и используйте его в качестве агента сборки.
Логирование и диагностика
- Добавьте в скрипт логи для более детального отслеживания процесса:
set -x # для отображения выполняемых команд
- Отслеживайте вывод команды
pod install
, чтобы найти возможные конфликты в зависимостях.
Обновление окружения
Если проблема сохраняется, возможно, стоит рассмотреть:
- Обновление версии Ruby на CI/CD сервере.
- Изменение конфигурации агента Azure DevOps на использование более стабильной или совместимой версии Ruby.
3. Заключение
Устранение подобных проблем может потребовать терпения и внимательности. Сфокусируйтесь на совместимости ваших зависимостей и корректной конфигурации окружения. Если после всех этих шагов ваша проблема не решится, подумайте о создании вопроса на специализированных форумах, таких как Stack Overflow, где сообщество может предложить дополнительные решения.