heroku 我如何指定一个gem从一个私有的github仓库中拉取?

vnjpjtjt  于 2023-03-08  发布在  Git
关注(0)|答案(9)|浏览(367)

我想使用Github上的一个私有存储库。我将我的应用部署到Heroku。我如何指定一个私有存储库作为gemfile的源代码呢?我想简单地说

gem "mygem", :git=>"my github address"
cmssoen2

cmssoen21#

我发现部署从私有回购中提取的gem的最佳方法是使用GitHub's OAuth access
1.创建一个GitHub用户,可以访问所讨论的repo(最适合团队--如果你可以公开你的个人访问令牌,你可以简单地使用你自己的账户)。
1.为用户创建一个GitHub OAuth令牌,在GitHub API上使用curl就可以完成;更多信息请参见OAuth API。
1.将令牌添加到您的Gemfile中的git url。示例:

gem 'mygem', git: 'https://xxx123abc:x-oauth-basic@github.com/user_or_team/mygem.git'

我目前正在Heroku上使用这种方法,效果很好。好处是你不必暴露自己的个人信息,如果有什么东西被泄露,你可以随时撤销或重新生成令牌。

yqlxgs2m

yqlxgs2m2#

根据Heroku技术支持的建议,最简单的方法是将用户名和密码放入URL中,如Basic HTTP Auth,例如。

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

这对我们很有效。但我们还是有点不满意,因为我们必须在gem文件中输入密码。我们通过添加一个新的github用户帐户并将该帐户添加为gem项目的合作者来解决这个问题。仍然不是万无一失的安全性,但影响更小。
我读到的其他选项是set up your own gem servervendor the gem

**2012年5月16日更新:**避免将密码放入Gemfile的另一种方法是将密码放入环境变量;在Heroku上,您可以使用heroku config:add 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'

这是Heroku上的标准,以避免将密码、API密钥和任何凭据放入代码中。对于本地开发/测试,您可以设置这些环境变量。或者,假设您的开发机器设置为通过SSH访问github,则本地开发不需要凭据(SSH凭据已经生效)。因此,您可以设置一些条件逻辑:

private_repo_credentials = %w(var_private_gem_username var_private_gem_password).
  map { |var| ENV[var] }.compact.join(':')
private_repo_credentials << '@' unless private_repo_credentials.empty?
# private_repo_credentials will be "" if neither var is set
# private_repo_credentials will be "username:password@" if they are set
gem 'my_gem',
  :git => "https://#{private_repo_credentials}github.com/my_github_account.git",
  :ref => 'rev'

我还没有测试这最后一部分。请提供反馈。

qmb5sa22

qmb5sa223#

这个问题需要一个更好的答案,因为如果您想避免将凭据或oauth令牌放入存储库中,那么可接受的答案和投票最多的答案都不安全

请不要

gem 'my_private_gem', git: 'https://my_username:my_password@github.com/my_github_account/my_private_gem.git'

gem 'my_private_gem', git: 'https://xxx123abc:x-oauth-basic@github.com/my_github_account/my_private_gem.git'

即使您将它们作为环境变量移动,它们仍将写入您的Gemfile.lock中。

正确的解决方案是将以下内容放在Gemfile中:

gem 'my_private_gem', git: 'https://github.com/my_github_account/my_private_gem.git'

并通过以下方式配置Bundler以使用您的Oauth密钥:

export MY_OAUTH_KEY=abcd
bundle config github.com $MY_OAUTH_KEY

使用repo范围创建oauth密钥here
现在可以在您的计算机、CI和Heroku上设置env变量MY_OAUTH_KEY,以便它们都可以下载gem。
在Heroku上,您将设置以下环境变量:

BUNDLE_GITHUB__COM: <your_oauth_key>
lqfhib0f

lqfhib0f4#

我发现如果我可以从终端访问github(by uploading an ssh key to github),我可以简单地执行以下操作:

gem 'my_gem', :git => 'git@github.com:my_user/my_repo.git', :ref => 'revision_no'

而不会用git用户名或密码污染代码

q43xntqr

q43xntqr5#

h9vpoimq

h9vpoimq6#

除了@seth-bro的答案之外,我们还可以使用bundle config来使用bundler配置凭据,这样我们就不需要在Gemfile上公开oAuth令牌。
语法:bundle config github.com <your_github_oauth_token>
参考:https://gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743a0https://bundler.io/v1.16/bundle_config.html

2hh7jdfx

2hh7jdfx7#

希望在2015年仍然相关,你可以使用https://github.com/siassaj/heroku-buildpack-git-deploy-keys和github的部署键。
这样就避免了将用户名和密码放入Gemfile,而这将在Gemfile.lock中以纯文本形式结束

bqucvtff

bqucvtff8#

最安全的方法是按照以下方式配置github个人令牌:在按照official documentation创建github个人访问令牌后,执行以下操作:
1.在本地计算机中,执行以下操作:
bundle config github.com YOUR_GITHUB_PERSONAL_TOKEN:x-oauth-basic
1.在heroku中,设置BUNDLE_GITHUB__COM ENV变量:
BUNDLE_GITHUB__COM = YOUR_GITHUB_PERSONAL_TOKEN
您也可以从终端执行以下操作:
heroku config:set BUNDLE_GITHUB__COM=YOUR_GITHUB_PERSONAL_TOKEN

6yt4nkrj

6yt4nkrj9#

我发现,当使用env方法和heroku实验室:启用user_env_compile时,Gemfile.lock就没有问题了

相关问题