PIYO - Tech & Life -

bundle installするパスを一箇所にまとめる

Ruby Rails

リスク回避のためにソースコードはDropboxの管理下に置いています(一人プロジェクトだと% git pushを忘れる可能性も少なくありません)。

プロジェクトに関わるソースファイルだけであれば大した容量にはならないのですが、依存するライブラリのソースコードなどが入ってくる同期するデータサイズが増えます。

こうなるとDropboxの容量を食うのはもちろんなのですが、同期プロセスがガンガンに走ってしまいCPUがきつくなってしまい、MacbookAirのファンが大騒ぎになります。

主に問題になるのがRubyのbundlerでインストールしたgem。

パスを指定せずに% bundle installするとRuby全体が参照できるところにgemをインストールします。これをやるといろいろなバージョンが混在したりしてわけがわからなくなるので--pathオプションをつけてプロジェクトディレクトリ以下に置きましょうというのが一般的な話なんですが、さっきも言ったようにこれだとDropboxの同期が忙しくなります。

そこでなんとかしてプロジェクトディレクトリではないけどRuby全体に影響を与えないところに入れられないかなーと考えたのが適当に作ったこのスクリプト。

#!/usr/bin/env ruby

bundle_dir = "/Users/xoyip/.bundle_install_dir/"
name = Dir.getwd.gsub("/", "_")

system "bundle install --path #{bundle_dir}#{name} --binstubs=.bin"

ホームディレクトリにbundler用の場所を作り現在のディレクトリのフルパスを名前に変換したディレクトリ内に各gemをインストールするというもの。ベストなソリューションではないですが僕個人は一応満足しています。

ついでに--binstubsを指定して、↓の問題にも同時に対処できるようにしてあります。

railsのサブコマンドが使えなくなる問題の原因はbinstubs - ぴよログ