Частный репозиторий bitbucket на героку

У меня есть приложение rails, которое требует драгоценного камня. Я размещаю этот камень на битбакете в частном репозитории.

В моем Gemfile я добавил камень, как показано ниже:

gem "my-gem", :git => "[email protected]:my-username/my-gem.git", :branch => 'master'

Я хочу развернуть приложение rails на heroku с помощью

git push heroku master

Теперь я всегда получаю следующую ошибку

Fetching [email protected]:my-username/my-git-repo.git
Host key verification failed.
fatal: The remote end hung up unexpectedly

Я понимаю ошибку, потому что репозиторий установлен на закрытый. Но как я могу решить эту проблему?

Я уже прочитал этот вопрос: Развертывание в Heroku с помощью git на битбакете, но я действительно не получаю ответ:)..

Ответ 1

Bitbucket позволяет использовать HTTP basic auth для URL-адресов репозитория, похожих на github. Укажите URL для драгоценного камня как https://username:[email protected]/username/gemrepo.git.

Это означает, что у вас есть имя пользователя и пароль в Gemfile, который сам контролируется версиями, и это не очень хорошая практика, но, с другой стороны, то, что рекомендует Heroku, поэтому...

Ответ 2

У меня была такая же проблема, но в конце концов я сделал следующее в качестве обходного пути для предоставления пароля Bitbucket в Gemfile.

Основная идея - клонировать драгоценный камень из Bitbucket в локальный каталог, добавить его в ваше приложение и упаковать его в vendor/cache, чтобы Heroku мог его использовать. Мои точные шаги ниже:

  • Клонирование вашего драгоценного камня в локальном каталоге:

    git clone [email protected]:me/my_private_gem.git /home/me/my_private_gem

  • Добавьте драгоценный камень к вашему Gemfile в качестве "поддельного" репозитория Bitbucket:

    gem 'my_private_gem', :git => '[email protected]:me/my_private_gem.git', :branch => 'master' # this repo will not be used

  • Настроить Bundler для работы с локальным репозиторием (где вы клонировали камень на шаге 1):

    bundle config local.my_private_gem /home/me/my_private_gem

  • Запустите bundle install, как обычно, вы должны увидеть что-то вроде этого:

    Использование my_private_gem (0.0.1) из git @bitbucket.org: me/my_private_gem.git(at/home/me/my_private_gem)

  • Поместите все свои драгоценные камни в /vendor

    bundle package --all

  • Добавьте /vendor в свое репо

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

  • Нажмите на Heroku (не забудьте сначала перенести обновленные Gemfile и Gemfile.lock), вы увидите следующее:

    Использование my_private_gem (0.0.1) из git://github.com/my_private_gem/my_private_gem.git(at/tmp/build_19fmj3tup0zy2/vendor/cache/my_private_gem-8bc6f436e2c8)

Ссылки:

Ответ 3

Правильный способ достижения этого - с помощью конфигурации пакета, которая сохраняет конфигурацию в вашем домашнем каталоге .bundle/config, поэтому она остается вне репо.

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"

Ответ 4

Я бы предложил использовать ENV vars вместо нового пользователя, например:

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

Затем установите их, используя:

heroku config:add BITBUCKET_X=value

Для вашей среды разработки вы можете использовать драгоценный камень dotenv для определения учетных данных.

См. также: Как я могу указать драгоценный камень, чтобы вытащить его из частного репозитория github?