Значение нового блока" 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