【问题标题】:bitbucket private repository on herokuheroku 上的 bitbucket 私有存储库
【发布时间】:2013-08-10 06:26:29
【问题描述】:

我有一个需要 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,但我并没有真正得到答案:)..

【问题讨论】:

    标签: ruby-on-rails heroku bitbucket


    【解决方案1】:

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

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

    【讨论】:

    • 我刚试过。我创建了一个 bitbucket 帐户和一个虚拟存储库,并且能够使用 git clone https://nitzanshaked:mypassword@bitbucket.org/nitzanshaked/test-repo.git 进行克隆。我假设如果您将其用作 gem 的 URL,它应该可以工作。请注意,我使用的是“https://”,而不是“git+https://”。
    • 好的,我用“git”而不是“https”试过了。非常感谢!完美运行!不过我不喜欢把密码放到 Gemfile 里面,不过还是谢谢你的回复。
    • 为避免与将您的 bitbucket 密码存储在 Gemfile 中相关的安全问题,只需创建一个新用户并授予其对该私有 gem 存储库的读取权限。详情请见this post
    【解决方案2】:

    我遇到了同样的问题,但我最终做了以下解决方法,以在 Gemfile 中提供 Bitbucket 密码。

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

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

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

    2. 将 gem 作为“假”Bitbucket 存储库添加到您的 Gemfile

      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)(在 /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)(位于 /tmp/build_19fmj3tup0zy2/vendor/cache/my_private_gem-8bc6f436e2c8)

    参考文献:

    【讨论】:

    • 这对我有用。但是在本地更新gem之后,我需要做bundle install --local来更新,而不是做bundle install。这在引用的Bundler - package 中有所提及。
    【解决方案3】:

    我建议使用 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?

    【讨论】:

      【解决方案4】:

      实现此目的的正确方法是using bundle config,它将配置保存在您的主目录.bundle/config 中,因此它不会出现在repo 之外。

      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"

      【讨论】:

      • 这是实现我们需要的真正简单和最清晰的方法。谢谢!
      • 这绝对看起来像是 Heroku 部署的方式。谢谢!
      • 最后,一个可行的答案。关键是不要使用捆绑器“bitbucket:”方法,这似乎只适用于公共回购。但我必须在配置命令中包含整个 url:bundler config "bitbucket.org/User/mygem.git" user:password
      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 2018-01-06
      • 2017-10-19
      • 2017-01-04
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      相关资源
      最近更新 更多