我已经制作了一个rails应用程序,并希望将其部署到Heroku。但是,git push heroku master
失败,因为它没有访问gemfile中引用的gem的权限(因为存储库是私有的)。这一行产生错误。
gem 'auth', branch: 'master', git: 'git@bitbucket.org:myteam/auth.git'
首先,我查看了here,因此我尝试生成新的公钥和私钥,然后使用heroku keys:add
转移它们,但它不会#39}。 t接受私钥。
我还尝试this来模拟ssh并运行heroku run bash
,然后尝试运行ssh-keygen
,但当我尝试运行服务器时,那里的文件是临时的并且消失了。
答案 0 :(得分:2)
最简单的方法是将username
和password
放入网址,就像在基本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)。