【CircleCI】Run rspecテスト失敗から解決に向けて設定した環境変数(1/2)


問題

ローカルでは問題なくパスするテストが、CircleCIでのRun rspecでエラーとなった。

CircleCIのRun rspec エラー内容(抜粋)

Failures:
   1) リクエストが成功する

     Failure/Error: let(:url) { Rails.application.credentials.api[:API_URI] }

     NoMethodError:
        undefined method `[]' for nil:NilClass

     # ./spec/requests/suggests_spec.rb:6:in `block (2 levels) in <top (required)>'

     # ./spec/requests/suggests_spec.rb:11:in `block (2 levels) in <top (required)>'

エラー内容を確認。
そして該当のファイルを確認すると。
ちょうど、

 let(:url) { Rails.application.credentials.api[:API_URI] }

環境変数を取得し、インスタンス変数に代入しようとしている行であった。
ここから、CircleCIへうまく環境変数を渡す事ができていないことがわかる。
ここから、各設定項目を下記の通り確認していく。

.circleci/config.ymlへの設定

.circleci/config.yml

heroku_deploy:
    working_directory: ~/my_app
    docker:
      - image: sue445/heroku-cli
    steps:
      - checkout
      - build-tools/install-ci-tools
<!---(中略)->
      - run:
          name: Deploy
          command: |
            git push https://heroku:[email protected]/$HEROKU_APP_NAME.git master
      - run:
          name: Run post-deploy tasks
          command: |
            heroku config:set AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY RAILS_MASTER_KEY=$RAILS_MASTER_KEY # ここ
            heroku run bin/rails db:migrate
            heroku run bin/rails runner "['products', 'taxons', 'option_values', 'product_option_types', 'product_properties', 'variants', 'assets'].each { |table| Spree::Sample.load_sample(table) }"

RAILS_MASTER_KEY=$RAILS_MASTER_KEY、を追加

Dockerfile.devへの設定

FROM ruby:2.5.1-stretch

ENV ENTRYKIT_VERSION 0.4.0
ARG RAILS_MASTER_KEY  # ここ
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}  # ここ
WORKDIR /my_app

RUN apt-get update                                                                                                                      \
  && apt-get install                                                                                                                    \
    openssl                                                                                   

ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}
を追加

docker-compose.ci.ymlへの設定

version: "3"

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    networks:
      - default
    ports:
      - '33306:3306'
  redis:
    image: redis:alpine
    networks:
      - default
    ports:
      - '36379:6379'
  my_app:
    build:
      context: .
      dockerfile: Dockerfile.ci
    container_name: my_app
    ports:
      - '3000:3000'
    environment:
      MYSQL_USERNAME: root
      MYSQL_PASSWORD: password
      MYSQL_HOST: mysql
      REDIS_URL: "redis://redis:6379"
      RAILS_MASTER_KEY: ${RAILS_MASTER_KEY} #ここ
    depends_on:
      - mysql
      - redis
    networks:
      - default
    command: bundle exec rails server -b 0.0.0.0

RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
を追加。

CircleCI管理画面からの設定・Herokuの環境変数確認・登録について、長くなってしまったので、また追加で投稿したいと思います。

終わりに。

最後まで読んで頂きありがとうございます
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。