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.