2017-01-04 11 views
33

Недавно я создал новое приложение Rails 5 без репозитория git. Автогенерированный Gemfile содержит новый блок, который я раньше не видел:Значение нового блока «git_source (: github)» в Gemfile

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

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

ответ

29

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

Добавлено: Его обходной путь для ошибки в 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.

С fixing this would be a breaking change, поскольку это может аннулировать любой существующий файл Gemfile.lock, он исправлен в Bundler 2.x. В этот момент должно быть безопасно удалить это обходное решение.

+0

Тогда это ошибка от какого-то недавно обновленного драгоценного камня? какой жемчуг? –

+0

Другой способ обойти эту проблему - установить 'bundle config github.https true' – Stefan

+0

True @Stefan. Но любая команда настолько же безопасна, как и ее ленивый член. – max

14

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

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

4

Если вы не хотите, чтобы добавить этот код в ваш Gemfile но все же вы хотите безопасно получить доступ к драгоценному камню от github, вы можете использовать следующий метод:

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

 Смежные вопросы

  • Нет связанных вопросов^_^