我在Github上有一个我想使用的私有存储库。我将我的应用程序部署到Heroku。我怎样才能指定一个私人存储库作为我的gemfile文件的来源?我想这不会是不够的,只是说如何指定从专用github存储库中提取的gem?
gem "mygem", :git=>"my github address"
我在Github上有一个我想使用的私有存储库。我将我的应用程序部署到Heroku。我怎样才能指定一个私人存储库作为我的gemfile文件的来源?我想这不会是不够的,只是说如何指定从专用github存储库中提取的gem?
gem "mygem", :git=>"my github address"
按照从Heroku的技术支持的建议,要做到这一点最简单的方法是通过将用户名和密码的网址,如基本的HTTP认证,例如
gem 'my_gem', :git => 'https://my_username:[email protected]/my_github_account/my_repo.git', :ref => 'revision_no'
这对我们很有效。这仍然有些不满,因为我们不得不将密码放入Gemfile中。我们通过添加一个新的github用户帐户并将该帐户添加为gem项目上的协作者来处理此问题。仍然不是万无一失的安全,但影响更为狭窄。
我读到的其他选项是set up your own gem server或vendor 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:[email protected]" if they are set
gem 'my_gem',
:git => "https://#{private_repo_credentials}github.com/my_github_account.git",
:ref => 'rev'
我没有测试过这最后一部分。请提供反馈。
我发现部署从私人回购协议中获得的宝石的最佳方式是使用GitHub's OAuth access。要做到这一点:
创建访问回购问题一个GitHub的用户(最好的球队 - 如果你没事暴露你的个人访问令牌,你可以简单地使用自己的帐户)。
为用户创建一个GitHub OAuth令牌。通过使用curl
的GitHub API来做到这一点非常简单;有关更多信息,请参见the OAuth API。
将令牌添加到您的Gemfile中的git
网址。例如:
gem 'mygem', git: 'https://xxx123abc:[email protected]/user_or_team/mygem.git'
我目前使用在Heroku这种方法,它的伟大工程。美丽之处在于,您不必公开自己的个人信息,并且可以随时撤销或重新生成令牌。
我发现,当使用env方法和heroku实验室:启用user_env_compile然后没有问题的Gemfile。锁定
我发现,如果我从终端到github上(by uploading an ssh key to github)的访问,我可以简单地做:
gem 'my_gem', :git => '[email protected]:my_user/my_repo.git', :ref => 'revision_no'
不污染我的代码和我的git用户名或密码
希望仍然具有现实意义在2015年,您可以使用https://github.com/siassaj/heroku-buildpack-git-deploy-keys以及来自github的部署密钥。
这样你避免将用户名和进入的Gemfile,这将最终成为在Gemfile.lock的
~/.ssh
目录~/.ssh/id_rsa.pub
复制内容到https://github.com/MY_COMPANY/MY_GEM/settings/keysGemfile
使用:gem 'mygem', github: 'MY_COMPANY/MY_GEM'
bundle install
对于ENV的工作方式,你必须使实验室的插件:`Heroku的实验室:启用user_env_compile`。不幸的是,匹配Gemfile.lock仍然存在问题。 – 2012-07-07 21:59:39
感谢您的反馈。 – 2012-07-08 04:56:43
你也可以考虑使用Gemfury https://devcenter.heroku.com/articles/gemfury – Schneems 2012-08-30 16:20:42