2013-08-08 31 views
13

Ho un'app per rails che richiede una gemma. Ospito questa gemma su bitbucket in un repository privato.repository privato bitbucket su heroku

Nel mio Gemfile ho aggiunto il gioiello come segue:

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

Voglio schierare la mia applicazione Rails su Heroku con

git push heroku master 

Ora ottengo sempre seguente errore

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

Capisco l'errore, perché il repository è impostato su privato. Ma come posso risolvere questo problema?

ho già letto questa domanda: Deploying to Heroku using git on bitbucket, ma Io non realmente ottenere la risposta :) ..

risposta

11

Bitbucket consente un'autenticazione HTTP di base sugli URL del repository simile a github. Specificare l'URL per la gemma come https://username:[email protected]/username/gemrepo.git.

E fa significare avere il tuo nome utente e password nel vostro Gemfile, che a sua volta è la versione controllata, e che non è una buona pratica, ma d'altra parte è quello che Heroku raccomanda, quindi ...

+0

provato che già, non funziona .. – Mattherick

+1

ho appena provato. Ho creato un account bitbucket e un repository fittizio, ed è stato in grado di clonare usando 'git clone https: // nitzanshaked: [email protected]/nitzanshaked/test-repo.git'. Suppongo che se lo usi come URL per la tua gemma dovrebbe funzionare. Nota che ho usato "https: //", non "git + https: //". –

+0

Ok, l'ho provato con "git" invece di "https". Grazie mille! Funziona perfettamente! Ma non mi piace inserire la password nel Gemfile, ma comunque, grazie per la tua risposta. – Mattherick

6

I ha avuto lo stesso problema, ma ho finito col fare quanto segue come soluzione alternativa per fornire la password di Bitbucket nello Gemfile.

L'idea di base è quella di clonare la gemma di Bitbucket in una directory locale, aggiungerla alla tua app e inserirla in vendor/cache in modo che Heroku possa usarla. I miei passaggi esatti sono al di sotto:

  1. Clone vostro gioiello in una directory locale:

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

  2. Aggiungere la gemma al Gemfile come un 'falso' Bitbucket repo:

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

  3. Configurare Bundler in modo che funzioni contro il repository locale (dove e si clonato la gemma nella fase 1):

    bundle config local.my_private_gem /home/me/my_private_gem

  4. Run bundle install come al solito, si dovrebbe vedere qualcosa di simile:

    Utilizzando my_private_gem (0.0.1) da Git @ bitbucket. org: me/my_private_gem.Git (a/home/me/my_private_gem)

  5. pacchetto tutte le gemme in /vendor

    bundle package --all

  6. Aggiungi /vendor al tuo repo

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

  7. Push to Heroku (non dimenticare di impegnare il tuo aggiornato.210 e Gemfile.lock prima), si dovrebbe vedere qualcosa di simile al seguente:

    Utilizzando my_private_gem (0.0.1) da git: //github.com/my_private_gem/my_private_gem.git (a/tmp/build_19fmj3tup0zy2/vendor/cache/my_private_gem-8bc6f436e2c8)

Riferimenti:

+0

Questo ha funzionato per me. Ma dopo aver aggiornato localmente la gemma, invece di fare 'bundle install' per aggiornare, ho dovuto fare' bundle install --local'. Questo è menzionato nel [Bundler - pacchetto] di riferimento (http://bundler.io/v1.3/bundle_package.html). – Vic

2

Vorrei suggerire di usare ENV vars invece di un nuovo utente come:

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

Quindi impostare utilizzando:

heroku config:add BITBUCKET_X=value

Per il vostro ambiente di sviluppo si può usare la gemma dotenv per definire le credenziali.

Consulta anche: How can I specify a gem to pull from a private github repository?

3

Il modo corretto per raggiungere questo obiettivo è using bundle config, che salva la configurazione sulla vostra home directory .bundle/config in modo che rimanga al di fuori del pronti contro termine.

bundle config bitbucket.org user:pwd

E poi Heroku si devono impostare un simple configuration in a special way:

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

E nel tuo Gemfile è sufficiente utilizzare l'URL senza le credenziali.

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

+0

Questo è il modo più semplice e chiaro per ottenere ciò di cui abbiamo bisogno. Grazie! –

+0

Questo sicuramente sembra il modo di andare con le distribuzioni di Heroku. Grazie! –

Problemi correlati