Ошибка установки зависимостей CircleCI:
Your bundle is locked to my_cool_gem (0.7.2), but that version could not be
found in any of the sources listed in your Gemfile. If you haven't changed
sources, that means the author of my_cool_gem (0.7.2) has removed it. You'll
need to update your bundle to a version other than my_cool_gem (0.7.2) that
hasn't been removed in order to install.
Скриншот вывода CircleCI:
CircleCI не может найти гем, который я опубликовал в пакетах GitHub, но у меня нет такой проблемы в локальной разработке.
У меня есть подходящие версии RubyGems и Bundler, согласно документации GitHub — https://docs.github.com/en/free-pro-team@latest/packages/guides/configuring-rubygems-for-use-with- github-packages - и я полагаю, что следовал инструкциям по публикации и использованию указанных опубликованных драгоценных камней... и, опять же, использование работает локально, но не работает в CircleCI...
Версия RubyGems:
-bash> gem --version
3.0.9
Версия бандлера:
-bash> bundle --version
Bundler version 1.17.3
Gemfile:
source 'https://rubygems.org'
source 'https://rubygems.pkg.github.com/my_cool_org'
gem 'my_cool_gem', '0.7.2'
Обратите внимание, что я также пробовал:
source 'https://rubygems.org'
source 'https://rubygems.pkg.github.com/my_cool_org'
source 'https://rubygems.pkg.github.com/my_cool_org' do
gem 'my_cool_gem', '0.7.2'
end
🤔 А знаете ли вы, что...
Ruby on Rails также может использоваться для разработки не только веб-приложений, но и API и микросервисов.
Попробуйте запустить bundle update my_cool_gem
, если он изменяет Gemfile.lock
, это должно исправить.
Вы проверили, что он действительно все еще доступен в источнике? Я знаю, вы сказали, что это работает локально, но это может быть из-за локальных кешированных версий драгоценного камня. Bundle не будет пытаться установить то, что уже есть.
Вы можете проверить это, удалив его локально и снова запустив пакетную установку.
Убедитесь, что вы правильно установили переменную среды для аутентификации с помощью rubygems.pkg.github.com
.
(Хотя переменная может быть установлена, значение может быть неправильным - как это было со мной.)
Интересно, похоже на баг изображения. Что произойдет, если вы попытаетесь перечислить все доступные версии вашего драгоценного камня? gem search ^gem_name$ --all
?
Вы пытались принудительно обновить заранее? sudo gem update --system
Для меня проблема заключалась в том, что токены доступа были разными на локальной машине и на CI. И ключ на CI был действителен, но у него не было разрешения на конкретный репозиторий, содержащий запрошенный гем.
Несмотря на то, что Github предоставляет единый реестр для каждой организации, драгоценные камни связаны с репозиториями компании. И пакеты в реестре будут видимыми или невидимыми в зависимости от разрешений для этих репозиториев, которые имеют токены доступа. Например, пользователь может иметь доступ к некоторым репозиториям организации и не иметь доступа к другим — при использовании токена личного доступа этого пользователя будут видны только драгоценные камни, связанные с разрешенными репозиториями. Другие будут скрыты, поэтому ошибка «эта версия не может быть найдена».
Я снова столкнулся с этим, и на этот раз я не смог решить это с помощью решения, которое использовал в прошлый раз , и никакое другое решение также не сработало, поэтому вместо этого я решил временно обойти проблему, поместив копию драгоценного камня в вопрос непосредственно в моем приложении (процесс, известный как «вендоризация»; см. это , это и это):
gem unpack my_cool_gem # note, I actually had to specify the version with -v 0.12.1
mkdir vendor/gems/
mv my_cool_gem-0.12.1 vendor/gems/
В Gemfile
используйте параметр :path, а не :source
:
gem 'my_cool_gem', '0.12.1', path: 'vendor/gems'
Затем сгенерируйте Gemfile.lock
:
bundle install