Согласно предложению службы технической поддержки Heroku, самый простой способ сделать это - ввести имя пользователя и пароль в URL-адрес, как при базовой HTTP-аутентификации, например,
gem 'my_gem', :git => 'https://my_username:my_password@github.com/my_github_account/my_repo.git', :ref => 'revision_no'
Это сработало для нас. Это все еще несколько неудовлетворительно, так как нам пришлось ввести пароль в Gemfile. Мы решили эту проблему, добавив новую учетную запись пользователя github и добавив ее в качестве соавтора в проекте gem. Все еще не надежная защита, но воздействие более узкое.
Другие варианты, о которых я читал: настроить свой собственный гем-сервер или поставщик драгоценного камня .
Обновление от 16.05.2012:
Еще один способ обойти ввод пароля в Gemfile
- поместить пароль в переменную окружения; в Heroku вы делаете это с heroku config:add VAR=value
, а затем в Gemfile
вы используете эту переменную, например ::
gem 'my_gem',
:git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git",
:ref => 'rev'
Это стандарт Heroku, позволяющий избежать ввода паролей, ключей API и любых учетных данных в код. Для локальной разработки / тестирования вы можете установить эти переменные среды. Или, если ваша машина разработки настроена для доступа SSH к github, вам не понадобятся учетные данные для локальной разработки (учетные данные SSH уже будут действовать). Таким образом, вы можете настроить условную логику:
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'
Я не проверял эту последнюю часть. Пожалуйста, оставьте отзыв.