最近我创建了一个新的 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

它的意义是什么?每个新应用程序都必须这样做吗?

最佳答案

它是 Bundler 中一个错误的解决方法,该错误可能导致来自 github 的源通过 HTTP 而不是 HTTPS 加载 - 这使其容易受到中间人攻击。
git_source 添加了一个您可以使用的源,以便从 git 存储库下载 gem,而不是从 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 下载 gem。

由于 fixing this would be a breaking change 因为它会使任何现有的 Gemfile.lock 无效,所以它在 Bundler 2.x 中得到修复。此时,删除此解决方法应该是安全的。

关于ruby-on-rails - Gemfile 中新块 "git_source(:github)"的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41454333/

10-16 15:26