2013-08-08 10 views
13

Mam aplikację szyny, która wymaga klejnotu. Hostuję ten klejnot na bitbuckecie w prywatnym repozytorium.prywatne repozytorium bitbucket na heroku

W moim Gemfile dodałem gem jak następuje:

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

chcę wdrożyć mojej szyn aplikację na Heroku z

git push heroku master 

Teraz ja zawsze się następujący błąd

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

Rozumiem błąd, ponieważ repozytorium jest ustawione jako prywatne. Ale jak mogę rozwiązać ten problem?

już odczytać to pytanie: Deploying to Heroku using git on bitbucket, ale Do not naprawdę uzyskać odpowiedź :) ..

Odpowiedz

11

Bitbucket umożliwia podstawowego uwierzytelniania HTTP na URL repozytorium podobnych do github. Podaj adres URL klejnotu jako https://username:[email protected]/username/gemrepo.git.

To robi znaczy mający swoją nazwę użytkownika i hasło w swoim Gemfile, która sama jest wersja kontrolowane, a to nie jest dobra praktyka, ale z drugiej strony to właśnie Heroku zaleca sprawie, więc ...

+0

próbowali że już nie działa .. – Mattherick

+1

Właśnie spróbowałem. Stworzyłem konto bitbucket i fałszywą repozytorię, i mogłem klonować używając 'git clone https: // nitzanshaked: [email protected]/nitzanshaked/test-repo.git'. Zakładam, że jeśli używasz tego jako adresu URL dla twojego klejnotu powinno działać. Zauważ, że użyłem "https: //", a nie "git + https: //". –

+0

OK Próbowałem go z "git" zamiast "https". Dziękuję Ci bardzo! Działa idealnie! Ale nie chcę umieszczać hasła w Gemfile, ale w każdym razie, dziękuję za odpowiedź. – Mattherick

6

I miał ten sam problem, ale skończyło się na tym, że wykonałem poniższą procedurę, aby podać hasło Bitbucket w Gemfile.

Podstawową ideą jest sklonowanie klejnotu z Bitbucket do lokalnego katalogu, dodanie go do aplikacji i spakowanie go do vendor/cache, aby Heroku mógł z niego korzystać. Moi dokładne kroki są poniżej:

  1. sklonować gem do lokalnego katalogu:

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

  2. dodać Gem do swojej Gemfile jako 'fałszywe' Bitbucket repo:

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

  3. Skonfiguruj program Bundler do pracy z lokalnym repozytorium (np. e ty sklonowany gem w kroku 1):

    bundle config local.my_private_gem /home/me/my_private_gem

  4. Uruchom bundle install jak zwykle, powinieneś zobaczyć coś takiego:

    Korzystanie my_private_gem (0.0.1) od git @ bitbucket. org: me/my_private_gem.git (w/home/me/my_private_gem)

  5. Pakiet wszystkie kamienie język /vendor

    bundle package --all

  6. Dodaj /vendor do repo

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

  7. Push to Heroku (nie zapomnij podać zaktualizowanego Gemfile i Gemfile.lock pierwszy), powinieneś zobaczyć coś podobnego do poniższego:

    Korzystanie my_private_gem (0.0.1) od git: //github.com/my_private_gem/my_private_gem.git (w/tmp/build_19fmj3tup0zy2/vendor/Pamięć podręczna/my_private_gem-8bc6f436e2c8)

Odniesienia:

+0

To zadziałało dla mnie. Ale po aktualizacji gem na miejscu, zamiast robić 'bundle install' do aktualizacji, musiałem zrobić' bundle install --local'. Jest to wspomniane w przywołanym pakiecie Bundler (http://bundler.io/v1.3/bundle_package.html). – Vic

2

Proponuję użyć ENV vars zamiast nowego użytkownika, takich jak:

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

Następnie ustawić je przy użyciu:

heroku config:add BITBUCKET_X=value

dla danego środowiska Rozwoju może użyć klejnotu dotenv do zdefiniowania poświadczeń.

Zobacz także: How can I specify a gem to pull from a private github repository?

3

Właściwym sposobem osiągnięcia tego celu jest using bundle config, który zapisuje konfigurację w katalogu domowym .bundle/config więc pozostaje poza repo.

bundle config bitbucket.org user:pwd

A potem na Heroku trzeba ustawić simple configuration in a special way:

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

I w Gemfile po prostu użyć URL bez mandatów.

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

+0

To naprawdę prosty i jasny sposób na osiągnięcie tego, czego potrzebujemy. Dzięki! –

+0

To zdecydowanie wygląda na sposób na wdrożenie Heroku. Dzięki! –