web-dev-qa-db-ja.com

Gemfileの新しいブロック「git_source(:github)」の意味

最近、新しい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

それの意味は何ですか?すべての新しいアプリに必須ですか?

これはレガシーコードの一部であり、おそらく削除する必要があります。

追加:githubからのソースがHTTPSではなくHTTP経由でロードされる可能性のあるBundlerのバグの回避策-これにより、中間の攻撃。

git_sourceは、gemがrubygems.orgからのパッケージの代わりにgitリポジトリからダウンロードされるように使用できるソースを追加します。

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からgemをダウンロードしようとします。

これを修正すると重大な変更になる なので、既存のGemfile.lockが無効になるため、Bundler 2.xで修正されています。その時点で、この回避策を削除しても安全です。

47
max

Bundler:githubディレクティブは、安全でないhttpプロトコルを使用するgit://github.com/#{repo_name}.gitsource )からフェッチします。

これは将来のBundlerバージョンで修正される予定ですが、このスニペットはhttpsがBundler 1で使用されるようにGemfileの先頭に追加されます。

15
Paul J

このコードをgemfileに追加したくないが、githubからgemに安全にアクセスしたい場合は、次の方法を使用できます。

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