普段RailsかいていてデプロイはCapistranoを使用している
その中でbundle installする工程があるが通常はrubygemsに公開されているものを使用するので特に意識することがないがGithubのプライベートレポジトリにおいているものを使用する時はちょっと工夫が必要
例えば下記のようなGemfileがあったとして
gem 'private_gem', git: 'https://github.com/hatappi/private_gem.git'
特に何も設定せずにデプロイしようとすると下記のようなエラーが出てデプロイがこける
01 fatal: could not read Username for 'https://github.com': No such device or address 01 fatal: could not read Username for 'https://github.com': No such device or address 01 fatal: could not read Username for 'https://github.com': No such device or address 01 fatal: could not read Username for 'https://github.com': No such device or address 01 Git error: command `git clone 'https://github.com/hatappi/private_repo.git'
この時やる手としてはGithubトークンの生成してGemfileを下記のように修正する
# Gemfile gem 'private_gem', git: 'https://[Github token]:x-oauth-basic@github.com/hatappi/private_gem.git'
個人で使ったり特定のチームないだけで使うには良いが様々な人が見る中でトークンをベタ書きするのは気が引ける
そこで下記のようにENVにトークンをもたせる例も見ることがあるが、これだとトークンが必要ない環境であったとしてもトークンの指定をしなければならない
# Gemfile gem 'private_gem', git: 'https://#{ENV['GITHUB_TOKEN']}:x-oauth-basic@github.com/hatappi/private_gem.git'
改めてGitHub - bundler/bundler: Manage your Ruby application's gem dependenciesのdocを見てみるとそれらしい記述がある
どうやら下記のような環境変数を指定しておくとプライベートレポジトリもbundle install
できるようになる
$ export BUNDLE_GITHUB__COM=username:password $ export BUNDLE_GITHUB__COM=[githubトークン]:x-oauth-basic
最終的に
# Gemfile gem 'private_gem', git: 'https://github.com/hatappi/private_gem.git'
Gemfileの変更はしなくても良い
そのかわり今回はCapistranoでデプロイした際に環境変数を読み込めるように
/etc/environment
に
export BUNDLE_GITHUB__COM=[githubトークン]:x-oauth-basic
と書いて無事Capistranoでデプロイができるようになった