2013-08-08 15 views
13

Ich habe eine Rails App, die ein Juwel erfordert. Ich hosten dieses Juwel auf bitbucket in einem privaten Repository.Bitbucket privates Repository auf Heroku

In meinem Gemfile habe ich den Edelstein wie folgt vor:

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

ich mit meiner Rails-Anwendung auf Heroku bereitstellen möchten ich immer

git push heroku master 

Jetzt Fehler folgende

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

Ich verstehe den Fehler, weil das Repository auf privat gesetzt ist. Aber wie kann ich dieses Problem lösen?

Ich lese diese Frage bereits: Deploying to Heroku using git on bitbucket, aber ich wirklich die Antwort bekommen dont :) ..

Antwort

11

Bitbucket für HTTP-Basis Auth auf Repository-URLs ähnlich wie Github ermöglicht. Geben Sie die URL für den Edelstein als https://username:[email protected]/username/gemrepo.git an.

Es tut bedeuten Ihre Benutzername und Passwort in Ihrem Gemfile mit, die sich Version gesteuert werden, und das ist keine gute Praxis, aber auf der anderen Seite, das ist es, was Heroku empfiehlt, so ...

+0

versucht, das schon, nicht funktioniert .. – Mattherick

+1

ich es einfach versucht. Ich habe ein bitbucket-Konto und ein Dummy-Repository erstellt und konnte mit 'git clone https: // nitzanshaked: [email protected]/nitzanshaked/test-repo.git' klonen. Ich nehme an, dass wenn Sie das als URL verwenden für dein Juwel sollte es funktionieren. Beachten Sie, dass ich "https: //" und nicht "git + https: //" verwendet habe. –

+0

Ok Ich habe es mit "git" anstatt "https" versucht. Vielen Dank! Funktioniert perfekt! Aber ich mag es nicht, das Passwort in das Gemfile zu schreiben, aber trotzdem, danke für deine Antwort. – Mattherick

6

I hatte das gleiche Problem, aber ich endete das folgende als eine Umgehung für die Bereitstellung des Bitbucket-Passwort in der Gemfile.

Die Grundidee ist, den Edelstein von Bitbucket in ein lokales Verzeichnis zu klonen, fügen Sie es Ihrer App hinzu und verpacken Sie es in vendor/cache, damit Heroku es benutzen kann. Meine genauen Schritte sind unten:

  1. Clone Ihr Juwel in ein lokales Verzeichnis:

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

  2. Fügen Sie den Edelstein zu Ihrem Gemfile als 'fake' Bitbucket Repo:

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

  3. Konfigurieren Sie Bundler für die Arbeit mit dem lokalen Repository (where e geklont Sie den Edelstein in Schritt 1):

    bundle config local.my_private_gem /home/me/my_private_gem

  4. Run bundle install wie üblich Sie etwas sehen sollte:

    Mit my_private_gem (0.0.1) von git @ bitbucket. org: ich/mein_private_gem.git (at/home/me/my_private_gem)

  5. Paket alle Edelsteine ​​in /vendor

    bundle package --all

  6. hinzufügen /vendor zu Ihrem Repo

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

  7. Push-to Heroku (vergessen Sie nicht, Ihre aktualisiertezu verpflichten

    Mit my_private_gem (0.0.1) von git: 483.210 und Gemfile.lock zuerst), dann sollten Sie etwas wie die folgenden sehen //github.com/my_private_gem/my_private_gem.git (bei/tmp/build_19fmj3tup0zy2/Verkäufer/cache/my_private_gem-8bc6f436e2c8)

Referenzen:

+0

Das hat für mich funktioniert. Aber nachdem ich den Edelstein lokal aktualisiert hatte, musste ich 'bundle install' installieren, um zu aktualisieren. Ich musste' bundle install --local' installieren. Dies wird im referenzierten Bundler-Paket erwähnt (http://bundler.io/v1.3/bundle_package.html). – Vic

2

Ich würde vorschlagen, ENV verwenden Vars anstelle eines neuen Benutzers wie:

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

Dann setzte sie mit:

heroku config:add BITBUCKET_X=value

Für Ihre Entwicklungsumgebung kann den Edelstein dotenv verwenden, um die Anmeldeinformationen zu definieren.

Siehe auch: How can I specify a gem to pull from a private github repository?

3

Der richtige Weg, dies zu erreichen using bundle config ist, die die Konfiguration auf Ihrem Home-Verzeichnis speichert .bundle/config so dass es außerhalb des Repo bleibt.

bundle config bitbucket.org user:pwd

Und dann auf Heroku müssen Sie setzen einen simple configuration in a special way:

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

Und in Ihrem Gemfile Sie benutzen Sie einfach die URL ohne die Anmeldeinformationen.

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

+0

Das ist der einfachste und klarste Weg, um das zu erreichen, was wir brauchen. Vielen Dank! –

+0

Das sieht auf jeden Fall so aus wie bei Heroku-Bereitstellungen. Vielen Dank! –

Verwandte Themen