Как мне указать гем для извлечения из частного репозитория github? - PullRequest
58 голосов
/ 30 января 2011

У меня есть частный репозиторий на Github, который я хочу использовать.Я развернул свое приложение в Heroku.Как я могу указать частный репозиторий в качестве источника в моем gemfile?Я полагаю, было бы недостаточно просто сказать

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

Ответы [ 7 ]

115 голосов
/ 07 ноября 2012

Лучший способ, который я нашел для развертывания гема, извлеченного из частного репозитория, - это использование OAuth-доступа GitHub . Для этого:

  1. Создайте пользователя GitHub с доступом к рассматриваемому репо (лучше всего для команд - если вы в порядке, выставляя свои личные токены доступа, вы можете просто использовать свою учетную запись).

  2. Создать токен GitHub OAuth для пользователя. Это просто сделать через GitHub API, просто используя curl; Подробнее см. API OAuth .

  3. Добавьте токен к URL-адресу git в вашем Gemfile. Пример:

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

В настоящее время я использую этот метод на Heroku, и он прекрасно работает. Прелесть в том, что вам не нужно раскрывать свою личную информацию, и вы можете отозвать или восстановить токен в любой момент, если что-то будет взломано.

44 голосов
/ 21 января 2012

Согласно предложению службы технической поддержки 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'

Я не проверял эту последнюю часть. Пожалуйста, оставьте отзыв.

3 голосов
/ 03 июля 2014

Я обнаружил, что если у меня есть доступ с моего терминала к github ( путем загрузки ключа ssh на github ), я могу просто сделать:

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

без загрязнения моего кода моим именем пользователя или паролем git

1 голос
/ 19 сентября 2018

В дополнение к ответу @ seth-bro мы также можем использовать bundle config для настройки учетных данных с помощью упаковщика, поэтому нам не нужно выставлять токен oAuth в Gemfile.

Синтаксис: bundle config github.com <your_github_oauth_token>

См .: https://gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743a0 https://bundler.io/v1.16/bundle_config.html

1 голос
/ 19 июля 2016
0 голосов
/ 06 мая 2015

Надеемся, что в 2015 году все еще актуально, вы можете использовать https://github.com/siassaj/heroku-buildpack-git-deploy-keys с ключом развертывания от github.

Таким образом, вы не будете вводить имя пользователя и переходить в Gemfile, который в итоге будет отображаться как простой текств Gemfile.lock

0 голосов
/ 31 января 2013

Я обнаружил, что при использовании подхода env и heroku labs: включите user_env_compile, тогда нет проблем с Gemfile.lock

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...