Ответ 1
В соответствии с предложением технической поддержки Heroku, самый простой способ сделать это - указать имя пользователя и пароль в URL-адрес, например, в Basic HTTP Auth, например
gem 'my_gem', :git => 'https://my_username:[email protected]/my_github_account/my_repo.git', :ref => 'revision_no'
Это сработало для нас. Это все еще несколько неудовлетворительно, поскольку мы должны были ввести пароль в Gemfile. Мы рассмотрели это, добавив новую учетную запись пользователя github и добавив эту учетную запись в качестве соавтора в проект gem. Все еще не надежная защита, но воздействие более узкое.
Другие параметры, о которых я читал, относятся к настройке собственного сервера драгоценных камней или вендора.
Обновление 5/16/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:[email protected]" if they are set
gem 'my_gem',
:git => "https://#{private_repo_credentials}github.com/my_github_account.git",
:ref => 'rev'
Я не тестировал эту последнюю часть. Пожалуйста, предоставьте отзыв.