LoginSignup
2
1

More than 1 year has passed since last update.

【ざっくり解説】CapistranoでプライベートなGemをインストールする

Last updated at Posted at 2021-07-05

問題点

Capistranoを使ってRailsアプリケーションをデプロイしていたところ、
プライベートリポジトリのGemをインストールしようとした際にエラーが発生。

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

ユーザー名・パスワードがないため、プライベートリポジトリを参照できない模様。
こちらの記事bundlerのドキュメントを参照するも、結果は変わらず。

解決法

手順①環境変数を設定する

bash_profile
export BUNDLE_GITHUB__COM=username:password

ここまではbundlerのドキュメントを読めばOK。

手順②Capistranoに環境変数を持たせる

deploy.rb
set :default_env, {
  BUNDLE_GITHUB__COM: ENV['BUNDLE_GITHUB__COM']
}

私の場合はここが抜けていた模様。
上記2点を記述することで、無事にプライベートリポジトリのGemをインストールできました。

余談

「なんでわざわざ環境変数渡さなきゃならんのだ…」とボヤいていると、Capistranoのドキュメントにこんな一文が。

By default Capistrano always assigns a non-login, non-interactive shell.
(直訳:Capistranoは常に非ログイン・非対話型シェルを割り当てます)

どうやら、Shellの起動方法には幾つかの種類があり、Capistranoはその中からnon-interactiveを割り当てるようです。
non-interactive Shell~/.bash_rc~/.bash_profileを読み込まないため、単に環境変数を記述したところで意味がない様子。

default_envに環境変数を渡すことで、SSHKitに環境変数を持たせているそう。SSHKitについてはよくわかっていないので、今後深堀ってみようと思います。

参考にした記事・ドキュメント

問題解決にあたり上記の記事・ドキュメントを参考にさせていただきました。誠にありがとうございました。 
貴重なドキュメントを残してくださる先人の皆様に心より感謝と尊敬を。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1