LoginSignup
2
2

More than 5 years have passed since last update.

Tmuxinatorをbundlerから使ったらハマった

Posted at

自分の環境以外ではなかなか起こりそうにないレアなハマり方っぽいですがメモとして残しておきます。

背景

Tmuxでセッションを再現するためのRubyで実装されたラッパーのTmuxinatorですが、 gem install で使われる事が想定されています。
自分はgemでインストールするソフトウェアもHomebrewにおけるBrewfileのようにdotfilesで管理したいと思っているので、dotfilesにGemfileを置いて、そこでbundlerを使ってインストールするようにしています。
更にグローバルな環境を汚染したくないため、 bundle install --path=vendor/bundle --binstubs=vendor/bin を実行した上(毎回書くの面倒だからRakeタスクに書いてる)で ~/dotfiles/vendor/bin にパスを通してそこに置いてあるファイルを実行するという方式でアプリケーションを起動していました。

起こったこと

Tmuxinatorで起動したtmux上でgemやbundleが正常に動作しない。
具体的には

  • gemコマンドが何をしてもエラーになる
  • bundle結果がそのディレクトリのGemfileを使ってくれない
  • gem uninstallを実行するとエラーを吐いてgemが一切動かなくなる

などといった症状が出ました。
辛い

解決

検索してみると「tmuxinator rbenv」が候補として出てくるのでこのあたりが怪しいなと思って見ていると、環境変数の汚染が発生しているIssueが見つかりました。
auto setting RBENV_VERSION · Issue #99 · tmuxinator/tmuxinator

この問題は既に解決しており、tmux起動時に環境変数が初期化されるようになっているようなのですが、bundlerを経由していることでこれに近い現象が発生しているのではないかと思い、起動前と起動後で環境変数のdiffを取ってみました。

結果として

BUNDLE_BIN_PATH
BUNDLE_GEMFILE
GEM_HOME
GEM_PATH
RUBYLIB
RUBYOPT 

が上書きされていました。

なので、tmux起動時にその辺の環境変数を一旦初期化する処理を挟めば正常にbundlerが動作するようになりました。

set-environment -gu BUNDLE_BIN_PATH
set-environment -gu BUNDLE_GEMFILE
set-environment -gu GEM_HOME
set-environment -gu GEM_PATH
set-environment -gu RUBYLIB
set-environment -gu RUBYOPT 
2
2
0

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
2