#問題
ローカルでは問題なくパスするテストが、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への設定
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:$HEROKU_API_KEY@git.heroku.com/$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を学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。