Значение нового блока" git source(:github) " в Gemfile

недавно я создал новое приложение Rails 5 без репозитория git. Автоматически сгенерированный Gemfile содержит новый блок, который я раньше не видел:

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

что это значит? Это обязательно для каждого нового приложения?

3 ответов


его часть устаревшего кода и, скорее всего, должна быть удалена.

добавлено: Его обходной путь для ошибки в Bundler, которая может привести к загрузке источников из github через HTTP, а не HTTPS, что делает его уязвимым для человека в середине атак.

git_source добавляет источник, который вы можете использовать, чтобы gem загружался из репозитория git вместо пакета из rubygems.org.

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

сделал бы это так, что когда вы заявляете:

gem 'foo_bar', :github => 'foo/bar'

Bundler попытается загрузить драгоценный камень из https://github.com/foo/bar.git.

С вам будет критическим изменением поскольку это аннулирует любой существующий Gemfile.блокировка фиксируется в комплекте 2.X. На этом этапе должно быть безопасно удалить этот обходной путь.


директива Bundler :GitHub будет извлекаться из git://github.com/#{repo_name}.git (источник), который использует небезопасный http протокол.

Это должно быть исправлено в будущих версиях Bundler, но этот фрагмент добавляется в верхнюю часть Gemfile, чтобы обеспечить https используется в комплекте 1.


Если вы не хотите добавлять этот код в свой gemfile, но все же хотите безопасно получить доступ к gem из github, вы можете использовать следующий метод:

gem 'foo_bar', git: 'https://github.com/foo/bar.git