読者です 読者をやめる 読者になる 読者になる

Docker内でbundle exec rspecがやけに遅かったけどなおった件

Docker Compose使ってRailsのプロジェクトをしています。

ある時から突然bundle exec rspecが遅くなってしまって、テスト自体は10秒程度なのにコマンドとしては2分くらい待たされるという現象になってしまいました。rspecに限らずbundle execが何やっても遅いという状態でした。

それもプロジェクトの一人が最初にその現象に当たって、数日後に私もなって、また数日後にもう一人が同様になって、という、感染しているんじゃないかという不思議な現象でした。でも、その3人目の人が解決策を見つけてくれました。

rails.hatenadiary.jp

細かいところは違いますが、Docker側とホスト側(Mac)の共有フォルダにvender/bundleがあるとこうなるようです。上記の3人目の感染者はグローバルにインストールしたらなおったと教えてくれました。

でも2番目の感染者である私はグローバルインストールを避けたかったので、ちょっと違う方法を考えました。docker-compose.ymlのvolumesで指定した共有フォルダにrailsプロジェクトを入れているのですが、gem置き場をたとえばvender/bundleというように指定すると結局共有フォルダ内に置くことになってしまうので、bundle installする時に--path=~/project1/vender/bundleとしてみました。そうするとDocker側とホスト側で~/project1/vender/bundleがgem置き場として指定されるけど、実態は共有フォルダじゃない別々のところに管理されます。

グローバルインストールじゃないし、遅い件もなおったしで、ひとまず満足です。

ちなみに、なぜ最初から遅いわけじゃなくて、一人ずつ感染が広がっていったのかは、不明なままです。。。