はじめに
ポートフォリオにCircleCIを組み込みたいと思い、何とか自動テストを通すことができるようになりました。
しかしTwitter apiを使用するために作成したapi key等を、環境変数として.envで追加したところ自動テストが通らなくなりました。
今後も同じようなエラーが起きた時に確認できるよう備忘録として残そうと思います。
api keyを追加したらdb:createでエラーが発生
今までは通っていた"rails db:create"がapi key(.envファイルにはTWITTER_KEYの名前で格納しています)を追加したところ下記のエラー文が表示されました。
key not found: "TWITTER_KEY" (KeyError)
.envに記述されている内容はgithubにpushしてはいけないので、当然githubのファイルを使って動くCircleCI上では、TWITTER_KEYの中身を見つけられません。
CircleCIに環境変数を追加する
このエラーを解決させるためには、CircleCIのサイトに直接、環境変数を追加する必要があります。
まず、CircleCIのProjectsのページから"project setting"を選択し、"Environment Variables"に移動したら"Add Environment Variable"をクリックします。
そこで、nameにはkeyを格納している名前,valueにkeyを入れて"Add Environment Variable"を押します。
これでCircleCIへ環境変数を追加する作業が完了しました。
.circleci/config.ymlに記述を追加する
CircleCIに環境変数を追加したら、今度はCircleCIの設定を記述しているconfig.ymlに環境変数を追加する必要があります。
environmentの箇所に下記のように追加すればOKです。
environment:
BUNDLE_JOBS: "3"
BUNDLE_RETRY: "3"
APP_DATABASE_HOST: "127.0.0.1"
RAILS_ENV: test
TWITTER_KEY: $TWITTER_KEY
TWITTER_SECRET: $TWITTER_SECRET
=> CircleCIで登録したnameに$を追加する形("$name")で記載すれば、環境変数を使用できるようです。
これでエラーはなくなり、自動テストが通るようになりました!
※余談ですが、自分が実装したい機能にTwitter apiは必要なかったことを先ほど知りました。。
認証まわりで苦戦して1日半くらい無駄にした。。
決めつけで動くのは本当に良くないことを見にしみて感じました。。。。