3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails + Postgres + github actions でCIを構築する

Posted at

結論から

最初に完成版を先に提示するとこうなりました。

name: Verify
# This workflow is triggered on pushes to the repository.
on: [push]

jobs:
  build:
    # Job name is Greeting
    name: verify
    # This job runs on Linux
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:12
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: test
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
    container:
      image: ruby:2.5.3
      env:
        RAILS_ENV: test
        POSTGRES_HOST: postgres
        RAILS_DATABASE_USER: postgres
        RAILS_DATABASE_PASSWORD: password

    steps:
      - name: checkout
        uses: actions/checkout@v2
      - name: bundler set up
        run: |
          gem install bundler
          bundle install
      - name: install node
        uses: actions/setup-node@v1
        with:
          node-version: '12'

      - name: db migrate
        run: |
          bundle exec rails db:migrate

      - name: verify
        run: |
          bundle exec rubocop
          bundle exec rspec

postgresの構築

処理順番として先にpostgresを立てて、その後にrailsが駆動するようにしています。

  service:
     postgres:
        image: postgres:12
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          POSTGRES_DB: test
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

ここのoptionでヘルスチェックをして問題なければ、railsの構築処理に進むようになっています。
postgresのイメージを使っているのですが、パスワードの未指定or空文字列を受け付けてないので必ず指定しましょう。

rails の環境構築

  • bundlerをインストール
  • bundlerでgemをインストール
  • DBをmigration
  • テスト、lintを実行

上記の順序で作業が行われます。
ただrailsを環境構築する場合、ruby と jsを実行、解析できる環境が必要になるので、

     - name: install node
        uses: actions/setup-node@v1
        with:
          node-version: '12'

の部分でnodeを導入しています。

postgres連携

    container:
      image: ruby:2.5.3
      env:
        RAILS_ENV: test
        POSTGRES_HOST: postgres
        RAILS_DATABASE_USER: postgres
        RAILS_DATABASE_PASSWORD: password

DBmigrationのために環境変数をrailsに対して色々設定しています。

名前解決

POSTGRES_HOST: postgres

は接続するpostgresのホストを名前解決しています。
この右側のpostgresと言う文字列は、postgresの構築で出てきた、
service直下のやつを指定しています。

こんな感じでservice名を指定することで名前解決をできたりします。

左のPOSTGRES_HOSTはrailsのdatabase.ymlの使用したい環境のhostでどの環境変数が使われているかを確認して、
変えるようにしましょう。

環境指定

RAILS_ENVを指定することで、railsをどの環境で動かすかを指定します。
今回はテストを動かしたいため、testと指定しています。

その他の環境変数

当たり前ですが、 env:以下に環境変数を色々追加できるので、
実行時に必要となる環境変数を書きましょう。
ただし、外部へのAPIキーなど機密性が高いものに関しては secretを活用しましょう。

終わりに

railsを初めて触ったのですが、DB - Railsの名前解決にやたらと時間がかかりました。
また、やっつけ仕事で作ったのでキャッシュなどはまだやってないので時間が開けば追加したいと思います。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?