Githubに使用したいプライベートリポジトリがあります。アプリをHerokuにデプロイします。 gemfileのソースとしてプライベートリポジトリを指定するにはどうすればよいですか?単に言うだけでは不十分だと思います
gem "mygem", :git=>"my github address"
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'
この最後の部分はテストしていません。フィードバックをお願いします。
プライベートリポジトリからプルしたgemをデプロイするための最良の方法は、 GitHubのOAuth access を使用することです。
問題のレポジトリへのアクセス権を持つGitHubユーザーを作成します(チームに最適–個人のアクセストークンを公開しても問題ない場合は、自分のアカウントを使用するだけです)。
ユーザーのGitHub OAuthトークンを作成します。curl
を使用してGitHub APIでこれを行うのは非常に簡単です。 the OAuth API その他.
Gemfileのgit
URLにトークンを追加します。例:
gem 'mygem', git: 'https://xxx123abc:[email protected]/user_or_team/mygem.git'
私は現在、Herokuでこの方法を使用していますが、うまく機能しています。美しさは、自分の個人情報を公開する必要がなく、何かが危殆化した場合はいつでもトークンを無効化または再生成できることです。
端末からgithubにアクセスできる場合( sshキーをgithubにアップロードすることで )、簡単にできることがわかりました:
gem 'my_gem', :git => '[email protected]:my_user/my_repo.git', :ref => 'revision_no'
gitユーザー名またはパスワードでコードを汚染することなく
~/.ssh
ディレクトリの下にあることを確認してください~/.ssh/id_rsa.pub
のコンテンツを https://github.com/MY_COMPANY/MY_GEM/settings/keys にコピーしますGemfile
で次を使用します:gem 'mygem', github: 'MY_COMPANY/MY_GEM'
bundle install
を実行します@ 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
2015年に引き続き関連することを願っており、githubのデプロイキーで https://github.com/siassaj/heroku-buildpack-git-deploy-keys を使用できます。
これにより、ユーザー名を入れずにGemfileに渡すことができます。GemfileはGemfile.lockにプレーンテキストとして記録されます。