使用gemfile

时间:2015-08-29 01:36:25

标签: ruby-on-rails ruby heroku gemfile

我已经制作了一个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,但当我尝试运行服务器时,那里的文件是临时的并且消失了。

1 个答案:

答案 0 :(得分:2)

最简单的方法是将usernamepassword放入网址,就像在基本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)。