14

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

在我的 Gemfile 中,我添加了 gem,如下所示:

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

4 回答 4

9

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

确实意味着在您的 Gemfile 中包含您的用户名和密码,它本身是受版本控制的,这不是一个好习惯,但另一方面,这是 Heroku 推荐的,所以......

于 2013-08-08T15:16:43.447 回答
8

实现此目的的正确方法是使用 bundle config,它将配置保存在您的主目录中.bundle/config,因此它位于 repo 之外。

bundle config bitbucket.org user:pwd

然后在 Heroku 上,你必须以一种特殊的方式设置一个简单的配置

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

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

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

于 2016-11-26T01:09:36.257 回答
6

我遇到了同样的问题,但我最终做了以下作为在Gemfile.

基本思想是将来自 Bitbucket 的 gem 克隆到本地目录,将其添加到您的应用程序中并将其打包,vendor/cache以便 Heroku 可以使用它。我的具体步骤如下:

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

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

  2. 将 gemGemfile作为“假”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:me/my_private_gem.git 的 my_private_gem (0.0.1) (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)

参考:

于 2013-08-13T22:40:25.697 回答
2

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

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

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

heroku config:add BITBUCKET_X=value

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

另请参阅:如何指定要从私有 github 存储库中提取的 gem?

于 2015-04-22T12:31:24.790 回答