Запущенный пакет или rspec добавляет строку в Gemfile.lock

После запуска различных команд (например, bundle и rspec) в проекте Ruby, Gemfile.lock обновляется и x86_64-darwin-17 добавляется в PLATFORMS заголовок. Почему это происходит? Как я могу предотвратить это?

Бег gem env дает этот интересный контекст:

○ → gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin17]
  #...etc  
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-17

3 ответа

Ответ от @RangerRanger у меня не сработал, но я проверил документацию упаковщика, как и он, и нашел это, кто работал на меня:

force_ruby_platform (BUNDLE_FORCE_RUBY_PLATFORM): игнорировать платформу текущего компьютера и устанавливать только драгоценные камни платформы ruby. В результате гемы с нативными расширениями будут скомпилированы из исходников.

Вот команда: bundle config force_ruby_platform true

Это было вызвано глобальной конфигурацией комплектов. Установка в false остановила поведение.

specific_platform (BUNDLE_SPECIFIC_PLATFORM): разрешить компоновщику разрешать для конкретной работающей платформы и сохранять его в файле блокировки, вместо того, чтобы использовать только общую платформу. Конкретной платформой является точная триплетная платформа, сообщаемая Gem::Platform.local, например x86_64-darwin-16 или universal-java-1.8. С другой стороны, универсальными платформами являются такие, как ruby, mswin или java. В этом примере x86_64-darwin-16 будет соответствовать ruby, а universal-java-1.8 - java.

Если вы хотите установить зависимости без обновления Gemfile.lockПросто используйте --frozen вариант. например bundle --frozen, Это установит зависимости как обычно, за исключением обновления Gemfile.lock

редактировать

Если это не очень хорошее решение, возможно, лучше всего добавить Gemfile.lock к .gitignore специфично для вашего локального репо. Вы можете создать один на your_repo/.git/info/exclude согласно этому ответу

Другие вопросы по тегам