2016-09-26

WindowsでRails x Herokuと仲良くする

困ったこと

  • Gemfile.lock には platform 情報が入ってしまうので、Un*x系 のプラットフォームと Windows を混ぜてしまうと Gemfile.lock に diff ができる
  • Heroku は Windows で作った Gemfile.lock を無視する

このコンボで Windows で Rails アプリの開発に参加すると Gemfile.lock が無視されるので Heroku に git push 後の bundle install で意図せず各種 gem のバージョンが上がって build に失敗したりする。

解決策

  • Gemfile.lock の diff だけを commit しておく
  • この commit を削除するか revert して Heroku に git push

CIでどうする

  • CircleCI を使っている
  • 特定の branch にだけ Windows からの commit が入るようにしてある
  • 専用の staging 環境を用意してあり CircleCI から Heroku に deploy している

前提で、以下のような deploy スクリプトを用意した。

git config --global user.name <name>
git config --global user.email <addr>
git checkout .
git revert --no-edit <hash>
git push -f git@heroku.com:{repos} <branch>:master

基本的には CircleCI オススメ設定の

git push <remote> $CIRCLE_SHA1:master

と書いている部分を、

git push <remote> <branch>:master

に変えたうえで、Gemfile.lock に変更が入った commit を revert で取り除いたのち push しているだけ。

※ 途中 checkout してるのは bundle install やら npm install の際に commit 済みのコードが一部書き換わるため。

今回の方法で解決できないこと

今回のケースは基本が mac での開発で、途中一部に Windows を混ぜたものなので Heroku に無視されない Gemfile.lock が用意できており、Gemfile.lock の diff だけを消す方法を採れたが、最初から Windows で開発する場合は Linux を用意する1か、JRuby 使えと Heroku さんは仰っております。

Getting Started on Heroku with Ruby (Microsoft Windows) | Heroku Dev Center

まぁ LL Web を Windows でやっちゃダメというのを改めて思ったのでした。

  1. Windows で開発する場合? 

About

例によって個人のなんちゃらです