Частный репозиторий 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?