Подтвердить что ты не робот

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

В чем смысл этого? Является ли это обязательным для каждого нового приложения?

4b9b3361

Ответ 1

Это фрагмент старого кода и, скорее всего, будет удален.

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

git_source добавляет источник, который вы можете использовать, чтобы камень был загружен из репозитория 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.lock, оно исправлено в Bundler 2.x. В этот момент должно быть безопасно удалить это обходное решение.

Ответ 2

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

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

Ответ 3

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

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