herokuCIでrailsのrspecを行う

目次

マーケター、エンジニアを月1時間からジョインできるプラットフォーム

airteamは月1時間からマーケターやエンジニアに相談できるプラットフォーム。 雇うのはハードル高いけどプロをチームに入れたい。そんな経営者のためのサービスです。 相談にのる方も募集しています。

タスクなしだから月一時間からジョイン可能

作業はなくオンライン相談メイン。 月1時間からさっと経験者に継続的に相談できます。

多様な経験者を雇用するより何倍も早くチームに

あらゆるジャンルの経験者がいるので あなたのチームのノウハウの選択肢が広がります。

NDAはすでに締結済み、契約もスムーズ

契約の煩雑なやりとりはなく、NDAはすでに締結済み、書面のやりとりはありません。

herokuCIでrailsのテスト(rspec)を回したいなと思ったんですが、意外と設定に戸惑ったのでメモ。

やりたいこと

下記の構成でテストを回せるようにする。

  • rails
  • rspec
  • heroku ci

deployするたびにherokuCIでテストが回るようにする。

やったこと

  • githubとの連携
  • review appを作成
  • herokuCIの設定( https://devcenter.heroku.com/ja/articles/heroku-ci )
  • pipelineのherokuCIで環境変数を設定
  • test用のdbはapp.jsonで設定

app.jsonの設定

app.jsonでdbの設定をする。

{
  "environments": {
    "test": {
      "addons": ["heroku-postgresql"],
      "scripts": {
        "test-setup": "bin/rails db:migrate db:seed",
        "test": "bundle exec rspec"
      }
    }
  }
}

上記はseed情報をいれて、addonも設定している。

https://devcenter.heroku.com/ja/articles/heroku-ci#add-ons

in-dynoといってtest用のプランがあるが、設定しなくても勝手にそのプランになる。一時的にdbが作成され、testが終わると破棄される。

詰まったところ

herokuCIの環境変数設定

RACK_ENV,RAILS_ENVはtestに設定。review app自体はproductionで設定。review appは最初developmentなのかなと思ったが、developmentだとconfig.web_console.whitelisted_ipsでip制限に引っかかる。まあ、消してしまえばいよかったんだがproductionにする方向で。

もし別DBを設定するなら

何かしらの理由でtest用の一時的なDBではなく、本番でも使えるDBをtestに使う場合。

testの際にdbを削除できるようにDISABLE_DATABASE_ENVIRONMENT_CHECKを1に

testの際にはdbを毎回削除するのでDISABLE_DATABASE_ENVIRONMENT_CHECKを1にしておく。これがないとdbが削除できないようになっている。これは絶対にtest環境以外では設定しないように。これを設定しているとdbのデータが壊れるのでこの環境変数を設定している環境でのdbは必ず使い捨てのものに

DBを消してもいいものに

herokuだとheroku postgresがappごとに契約できる。testのdbは削除できる使い捨てのものがいいのでreview appのものを設定している。(これは好み

javascript(webpacker)のbuildpackを使う場合

compileのエラー

なぜかrubyのbuildpackのみではtestを実行できなかった。エラー内容としてはcompileのエラー。compileを都度してほしいとのことでこの辺buildpackでなんとかしてくれそうだがrubyだけだと難しいのでnodeのbuildpackも設定。

下記のapp.jsonにてテストのコマンドを実行

{
  "environments": {
    "test": {
      "scripts": {
        "test": "bundle exec rails webpacker:compile",
        "test": "bundle exec rspec"
      }
    }
  },
  "buildpacks": [
    {
      "url": "heroku/nodejs"
    },
    {
      "url": "heroku/ruby"
    }
  ]
}

rubyを後にして最終的にはrubyで終わるようにする。上記でbuildpackの設定とrspecの前にcompileを実行するようにコマンドを設定する。