web-dev-qa-db-ja.com

プライベートgithubリポジトリからプルするgemを指定するにはどうすればよいですか?

Githubに使用したいプライベートリポジトリがあります。アプリをHerokuにデプロイします。 gemfileのソースとしてプライベートリポジトリを指定するにはどうすればよいですか?単に言うだけでは不十分だと思います

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

Heroku技術サポートからの提案によると、これを行う最も簡単な方法は、Basic HTTP Authのように、ユーザー名とパスワードをURLに入れることです。

gem 'my_gem', :git => 'https://my_username:[email protected]/my_github_account/my_repo.git', :ref => 'revision_no'

これはうまくいきました。 Gemfileにパスワードを入力する必要があったため、これはまだやや不満です。これに対処するには、新しいgithubユーザーアカウントを追加し、そのアカウントをgemプロジェクトの共同作業者として追加しました。絶対確実なセキュリティではありませんが、その影響はより限定的です。

私が読んだ他のオプションは、 独自のgemサーバーをセットアップする または vendor the gem です。

2012年5月16日更新:パスワードを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キー、および資格情報をコードに入れないようにします。ローカル開発/テストの場合、これらの環境変数を設定できます。または、githubへのSSHアクセス用に開発マシンがセットアップされていると仮定すると、ローカル開発の資格情報は必要ありません(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'

この最後の部分はテストしていません。フィードバックをお願いします。

45
Wolfram Arnold

プライベートリポジトリからプルしたgemをデプロイするための最良の方法は、 GitHubのOAuth access を使用することです。

  1. 問題のレポジトリへのアクセス権を持つGitHubユーザーを作成します(チームに最適–個人のアクセストークンを公開しても問題ない場合は、自分のアカウントを使用するだけです)。

  2. ユーザーのGitHub OAuthトークンを作成します。curlを使用してGitHub APIでこれを行うのは非常に簡単です。 the OAuth API その他.

  3. Gemfileのgit URLにトークンを追加します。例:

gem 'mygem', git: 'https://xxx123abc:[email protected]/user_or_team/mygem.git'

私は現在、Herokuでこの方法を使用していますが、うまく機能しています。美しさは、自分の個人情報を公開する必要がなく、何かが危殆化した場合はいつでもトークンを無効化または再生成できることです。

116
Seth Bro

端末からgithubにアクセスできる場合( sshキーをgithubにアップロードすることで )、簡単にできることがわかりました:

gem 'my_gem', :git => '[email protected]:my_user/my_repo.git', :ref => 'revision_no'

gitユーザー名またはパスワードでコードを汚染することなく

3
gardenofwine
  • sshキー を作成します
  • これらのキーが~/.sshディレクトリの下にあることを確認してください
  • ~/.ssh/id_rsa.pubのコンテンツを https://github.com/MY_COMPANY/MY_GEM/settings/keys にコピーします
  • Gemfileで次を使用します:gem 'mygem', github: 'MY_COMPANY/MY_GEM'
  • bundle installを実行します
2
itsnikolay

@ seth-broの答えに加えて、bundle configバンドルを使用して資格情報を設定し、GemfileでoAuthトークンを公開する必要がないようにします。

構文:bundle config github.com <your_github_oauth_token>

参照: https://Gist.github.com/sebboh/f1dfe4f096746c45f3e9ea06a09743ahttps://bundler.io/v1.16/bundle_config.html

1
Virtual

2015年に引き続き関連することを願っており、githubのデプロイキーで https://github.com/siassaj/heroku-buildpack-git-deploy-keys を使用できます。

これにより、ユーザー名を入れずにGemfileに渡すことができます。GemfileはGemfile.lockにプレーンテキストとして記録されます。

0
sia