heroku上的bitbucket私有存储库

时间:2013-08-08 13:47:46

标签: ruby-on-rails heroku bitbucket

我有一个需要宝石的rails应用程序。我在bitbucket上将这个gem托管在私有存储库中。

在我的Gemfile中,我添加了以下宝石:

gem "my-gem", :git => "git@bitbucket.org:my-username/my-gem.git", :branch => 'master'

我想用

在heroku上部署我的rails应用程序
git push heroku master

现在我总是得到以下错误

Fetching git@bitbucket.org:my-username/my-git-repo.git
Host key verification failed.
fatal: The remote end hung up unexpectedly

我理解错误,因为存储库设置为私有。但是我该如何解决这个问题?

我已经读过这个问题:Deploying to Heroku using git on bitbucket,但我没有得到答案:)..

4 个答案:

答案 0 :(得分:11)

Bitbucket允许在类似于github的存储库URL上进行HTTP基本身份验证。将gem的URL指定为https://username:password@bitbucket.org/username/gemrepo.git

意味着你的Gemfile中有你的用户名和密码,它本身就是版本控制的,这不是一个好习惯,但另一方面是什么Heroku建议,所以......

答案 1 :(得分:6)

我遇到了同样的问题,但我最终做了以下工作,以便在Gemfile中提供Bitbucket密码。

基本思路是将宝石从Bitbucket克隆到本地目录,将其添加到您的应用程序并将其打包到vendor/cache,以便Heroku可以使用它。我的确切步骤如下:

  1. 将您的gem克隆到本地目录:

    git clone git@bitbucket.org:me/my_private_gem.git /home/me/my_private_gem

  2. 将宝石添加到Gemfile作为'假'Bitbucket回购:

    gem 'my_private_gem', :git => 'git@bitbucket.org:me/my_private_gem.git', :branch => 'master' # this repo will not be used

  3. 配置Bundler以对照本地存储库(您在步骤1中克隆gem):

    bundle config local.my_private_gem /home/me/my_private_gem

  4. 像往常一样运行bundle install,您应该看到类似的内容:

      

    使用git@bitbucket.org的my_private_gem(0.0.1):me / my_private_gem.git(at / home / me / my_private_gem)

  5. 将您的所有宝石打包到/vendor

    bundle package --all

  6. /vendor添加到您的仓库

    git add vendor && git commit -m 'add my_private_gem to /vendor/cache'

  7. 推送到Heroku(不要忘记先提交更新后的GemfileGemfile.lock),您应该会看到以下内容:

      

    使用git://github.com/my_private_gem/my_private_gem.git中的my_private_gem(0.0.1)(at / tmp / build_19fmj3tup0zy2 / vendor / cache / my_private_gem-8bc6f436e2c8)

  8. 参考文献:

答案 2 :(得分:4)

实现此目的的正确方法是using bundle config,它会将配置保存在您的主目录.bundle/config上,使其保持在回购目录之外。

bundle config bitbucket.org user:pwd

然后在Heroku上你必须设置一个simple configuration in a special way

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

在您的Gemfile中,您只需使用没有凭据的URL。

gem 'gemname', git: "https://bitbucket.org/User/gemname.git"

答案 3 :(得分:2)

我建议使用ENV vars而不是像以下那样的新用户:

https://#{ENV['BITBUCKET_USER']}:#{ENV['BITBUCKET_PWD']}....

然后使用以下方式设置它们:

heroku config:add BITBUCKET_X=value

对于您的开发环境,您可以使用dotenv gem来定义凭据。

另请参阅:How can I specify a gem to pull from a private github repository?