66 votes

Comment puis-je spécifier une gemme à extraire d'un référentiel privé github?

J'ai un dépôt privé sur Github que je veux utiliser. Je déploie mon application sur Heroku. Comment puis-je spécifier un référentiel privé comme source sur mon fichier gem? J'imagine qu'il ne suffirait pas de simplement dire

 gem "mygem", :git=>"my github address" 
 

122voto

Seth Bro Points 1193

Le meilleur moyen que j'ai trouvé pour déployer un bijou tiré à partir d'un privé repo est l'utilisation de Github OAuth accès. Pour ce faire:

  1. Créer un Github utilisateur ayant accès à des pensions de titres en question (mieux pour les équipes–si vous êtes d'accord d'exposer vos données d'accès personnelles jetons, vous pouvez tout simplement utiliser votre propre compte).
  2. Créer un Github jeton OAuth pour l'utilisateur. Il est très simple de le faire via l'API Github juste à l'aide de curl (voir http://developer.github.com/v3/oauth/#oauth-authorizations-api pour plus de détails).
  3. Ajouter le jeton à l' git url dans votre Gemfile. Exemple:

gem 'mygem', git: 'https://xxx123abc:x-oauth-basic@github.com/user_or_team/mygem.git'

Je suis actuellement en utilisant cette méthode sur Heroku et il fonctionne très bien. La beauté est que vous n'avez pas à exposer vos propres renseignements personnels, et peut le révoquer et/ou régénérer le jeton à tout moment si quelque chose est compromise.

41voto

Wolfram Arnold Points 3490

Conformément à la suggestion de Heroku, de support technique, de la façon la plus simple de le faire est de mettre le nom d'utilisateur et mot de passe dans l'URL, comme dans de Base HTTP Auth, par exemple

gem 'my_gem', :git => 'https://my_username:my_password@github.com/my_github_account/my_repo.git', :ref => 'revision_no'

Cela a fonctionné pour nous. C'est encore un peu insatisfaisante que nous avons dû mettre un mot de passe dans le Gemfile. Nous avons traité ce par l'ajout d'un nouveau github compte d'utilisateur et d'ajouter que compte que collaborateur sur le projet gem. Toujours pas de sécurité à toute épreuve, mais l'impact est plus étroite.

D'autres options, j'ai lu environ sont à mettre en place votre propre bijou serveur ou fournisseur de la gemme.

Mise à jour 5/16/2012: Une autre façon de contourner en mettant le mot de passe dans l' Gemfile est de mettre le mot de passe dans une variable d'environnement; sur Heroku vous faites cela avec heroku config:add VAR=value, puis dans l' Gemfile il vous suffit d'utiliser cette variable, par exemple:

gem 'my_gem',
  :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
  :ref => 'rev'

C'est la norme sur Heroku pour éviter de mettre des mots de passe, clés API et toutes les informations d'identification dans le code. Pour le développement local/test, vous pouvez définir ces variables d'environnement. Ou, en supposant que votre machine de développement est mis en place pour l'accès SSH à github, vous n'aurez pas besoin d'informations d'identification pour le développement local (SSH informations d'identification seront en effet déjà). Donc, vous pourriez mettre en place la logique conditionnelle:

private_repo_credentials = %w(var_private_gem_username var_private_gem_password).
  map { |var| ENV[var] }.compact.join(':')
private_repo_credentials << '@' unless private_repo_credentials.empty?
# private_repo_credentials will be "" if neither var is set
# private_repo_credentials will be "username:password@" if they are set
gem 'my_gem',
  :git => "https://#{private_repo_credentials}github.com/my_github_account.git",
  :ref => 'rev'

Je n'ai pas testé cette dernière partie. Veuillez fournir des commentaires.

7voto

gardenofwine Points 812

J'ai trouvé que si j'ai accès à github depuis mon terminal ( en téléchargeant une clé ssh sur github ), je peux simplement faire:

 gem 'my_gem', :git => 'git@github.com:my_user/my_repo.git', :ref => 'revision_no'
 

sans polluer mon code avec mon identifiant ou mon mot de passe git

-3voto

doro Points 29

J'ai constaté qu'en utilisant l'approche env et les laboratoires heroku: activer user_env_compile, il n'y a pas de problème avec Gemfile.lock.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X