在 gemfile 中使用私有 git 存储库部署 heroku 应用程序

Deploy heroku app with private git repo in gemfile

我制作了一个 rails 应用程序,并想将其部署到 Heroku。但是,git push heroku master 失败了,因为它没有权限访问 gem 文件中引用的 gem(因为存储库是私有的)。此行产生错误。

gem 'auth', branch: 'master', git: 'git@bitbucket.org:myteam/auth.git'

首先我查看了 here,因此我尝试生成 new 组 public 和私钥,然后 t运行sferring他们用 heroku keys:add 结束了,但它不接受私钥。

我也试过this模拟ssh和运行heroku run bash,然后试过运行ssh-keygen,但是里面的文件是临时的并在我尝试 运行 服务器时消失了。

最简单的方法是将 usernamepassword 放入 URL,如在基本 HTTP 身份验证中一样,例如

gem 'my_gem', :git => 'https://my_username:my_password@github.com/my_github_account/my_repo.git', :ref => 'revision_no'

如果你不想把password放到Gemfile,那么你可以把它放到environment variable.

在 Heroku 上,您可以使用以下命令添加环境变量:

heroku config:add ENV_VAR=VALUE

然后在 Gemfile 中使用此环境变量,如下所示:

gem 'my_gem',
      :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
      :ref => 'rev'

为了避免在开发过程中必须使用 HTTPS,您还可以尝试拆分开发和生产模式,如下所示:

group :development do
    gem 'auth', branch: 'master', git: 'git@bitbucket.org:myteam/auth.git'
end
group production do
    gem 'my_gem',
      :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
      :ref => 'rev'
end

注意:这两种方法都不是 100% 安全的。但是,第二个选项(存储在 heroku 的环境变量中)比第一个选项(将它们存储在纯文本中)更安全。但是,没有其他选择可以做这样的事情(AFAIK)。