質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

circleciにでheroku_deploy時に環境変数が読まれない。['RAILS_MASTER_KEY']

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 303

score 10

前提・実現したいこと

CarrierWaveを導入し本番環境で画像を表示できるようセットアップしております。参考サイト

導入gem
gem 'carrierwave',
gem 'fog-aws'
gem 'dotenv-rails'

発生している問題

circleciを使用しherokuへデプロイをする際、「復号するためのキーが見つからない」とエラー文が出てきます
イメージ説明

エラー文抜粋:
Running: rake assets:precompile
Missing encryption key to decrypt file with. 
Ask your team for your master key and write it to //config/master.key or put it in the ENV['RAILS_MASTER_KEY']. 

該当のソースコード

/.circleci  
heroku_deploy:
    working_directory: ~/bookreco
    docker:
      - image: sue445/heroku-cli
    steps:
      - checkout
      - build-tools/install-ci-tools
      - jq/install
      - run:
          name: Identify who I am
          command: echo 'export MY_EMAIL=`heroku auth:whoami | tail -n 1`' >> $BASH_ENV
      - run:
          name: Identify Heroku app names to destroy
          command: echo 'export APP_NAMES_TO_REMOVE=`heroku apps --json | jq -r "map(select(.owner.email == "\"$MY_EMAIL\"" and (.name | contains(\"bookreco\")))) | sort_by(.updated_at) | reverse | .[5:] | .[].name"`' >> $BASH_ENV
      - run:
          name: Delete old apps if needed
          command: for app_name in $APP_NAMES_TO_REMOVE; do heroku apps:destroy -a $app_name -c $app_name; done
      - run:
          name: Define Heroku app name to create
          command: timestamp=`date +%Y%m%d%H%M%S` && echo "export HEROKU_APP_NAME=bookreco-$timestamp" >> $BASH_ENV
      - run:
          name: Create fresh Heroku app
          command: heroku apps:create $HEROKU_APP_NAME --addons=jawsdb:kitefin
      - 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 AWS_REGION=$AWS_REGION AWS_HOST_NAME=$AWS_HOST_NAME AWS_BUCKET=$AWS_BUCKET
            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) }"
            heroku run bin/rails runner db/seeds/bookreco_suggest.rb
config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
  if Rails.env.development? || Rails.env.test?
    config.storage = :file
  elsif Rails.env.production?
    config.storage :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory = 'bookreco'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      region: 'ap-northeast-1'
    }
  end
end
/.env

AWS_ACCESS_KEY_ID = '********'
AWS_SECRET_ACCESS_KEY = '*******'


CircleCIの歯車アイコンからAdd Variablesを選択し、AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY、という名前でそれぞれ環境変数を追加済イメージ説明

試したこと

・credentials.yml.encのaccess_keyの値は初期値から任意の値へ変更済

・「rails c」コマンドを使い、中身の値を確認
pry(main)> ENV['AWS_ACCESS_KEY_ID']⇨
pry(main)>Rails.application.credentials.secret_key_base⇨
コマンドの結果、どちらもcredentials.yml.encの中身を確認することができた

・config/master.keyの中身に値は作成されている

・config/environments/production.rbの中に「config.require_master_key = true」と記載

・carrierwave.rb修正⇨下記のように修正するも解決せず

config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
  if Rails.env.development? || Rails.env.test?
    config.storage = :file
  elsif Rails.env.production?
    config.storage :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory = 'bookreco'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
      region: 'ap-northeast-1'
    }
  end
end

本題

・carrierwave.rbに値をそのまま入れるとcircleciのdeployはクリアします。
その為原因として環境変数の設定に問題があるのだと思うのですが、どんな些細な可能性でも差し支えありません、アドバイスいただけないでしょうか。手当たり次第試している為情報が撮り散らかり申し訳ありません。

config/initializers/carrierwave.rb

  elsif Rails.env.production?
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: '******',
      aws_secret_access_key: '******',
      region: 'ap-northeast-1'
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

gem 'dotenv-rails'の設定場所が変だったようで環境変数が本番環境へ伝わっていなかったようです。

下記のようにしたら無事デプロイできました。

group :production do
  gem 'dotenv-rails'
 他略
end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る