2011-01-30 13 views
56

私は使いたいGithubの私的なリポジトリを持っています。私はHerokuに私のアプリを展開します。私のgemfileのソースとしてプライベートリポジトリを指定するにはどうすればいいですか?私は例えば、単純にこれを行う最も簡単な方法は、基本的なHTTP認証のように、URLにユーザー名とパスワードを入れてあり、Herokuの技術サポートからの提案を1としてプライベートgithubリポジトリからプルする宝石を指定するにはどうしたらいいですか?

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

答えて

46

を言うのには十分ではないでしょう想像します

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

これは私たちのために働いた。 Gemfileにパスワードを入れなければならないので、これはまだまだ不満です。新しいgithubユーザーアカウントを追加し、そのアカウントをgemプロジェクトの共同作業者として追加することで、これを処理しました。それでもセキュリティを保証するわけではありませんが、その影響はより狭いです。

私が読んだその他のオプションは、set up your own gem serverまたは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' 

これは、コードの中に、パスワード、APIキーと任意の資格情報を入れないようにするHerokuの上の標準です。ローカル開発/テストでは、これらの環境変数を設定できます。または、開発マシンが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:[email protected]" if they are set 
gem 'my_gem', 
    :git => "https://#{private_repo_credentials}github.com/my_github_account.git", 
    :ref => 'rev' 

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

+5

ENVアプローチを使用するには、ラボのアドオン「heroku labs:enable user_env_compile」を有効にする必要があります。残念ながら、Gemfile.lockに一致する問題はまだあります。 –

+0

フィードバックいただきありがとうございます。 –

+3

また、Gemfuryの使用を検討することもできます。https://devcenter.heroku.com/articles/gemfury – Schneems

102

プライベートレポから引き出された宝石を配備する最良の方法は、GitHub's 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の上でこのメソッドを使用していますし、それは素晴らしい作品。美しさは、あなた自身の個人情報を公開する必要がないことです。何かが侵害された場合、いつでもトークンを取り消したり、再生成することができます。

+3

これは私のために働いた。 OAuthトークンの作成方法の詳細については、https://help.github.com/articles/creating-an-oauth-token-for-command-line-use – John

+12

を参照してください。プレーンテキストのパスワードをバージョンコントロールに入力し、このパスワードの代わりにサードパーティのWebサイトにパスワードを配布するように指示します。 –

+2

GitHubサイトで個人用のOAuthトークンを作成できるようになりました:https://github.com/settings/tokens/new –

-3

envアプローチとherokuラボを使用すると、user_env_compileを有効にすると、Gemfileに問題はありません。私のGitのユーザー名やパスワード

+0

これは廃止されました。 – MikDiet

2

ロック2015年にはhttps://github.com/siassaj/heroku-buildpack-git-deploy-keysにgithubのデプロイキーを使用できます。

ユーザー名を入れて避けるこの方法では、プレーンテキストとして終わるであろう、Gemfileに渡すGemfile.lock

+0

これはHerokuに展開するときに機能しますか? –

+0

@KhoaNguyen Herokuサーバがgitリポジトリに直接アクセスしようとするので、これはそのままでは機能しません。あなたのHerokuサーバのsshキーをあなたのgithubリポジトリに追加することは可能かもしれないと思うので、このアクセスを許可します - **しかし、 – gardenofwine

0

うまくいけば、関連するまだで自分のコードを汚染することなく、

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

:私はgithubの(by uploading an ssh key to github)に私の端末からのアクセスを持っている場合、私は単純に行うことができますことを発見し

関連する問題