####結論
本番環境(EC2)でAPI keyを読み込むためには、/etc/environmentの中にAPI keyを書きこむ必要があります。
(テスト秘密鍵であればsk_testで始まる文字列を直接書く)
####経緯
チーム開発でメルカリを模したアプリを開発しています。
・rails (5.2.4.2)
・ローカル環境にてpayjpを使いクレジットカード登録機能を実装。動作確認済。
・ローカルにおいては、クレジットカードコントローラに下記記述をすることで、
.ENVファイルに記載されたAPI秘密鍵を読み込むことに成功していた。
Payjp.api_key = ENV["PAYJP_PRIVATE_KEY"]
・本番環境にてクレカ登録をすると、登録完了画面に遷移せず、
Payjp::AuthenticationError in CreditCardsController#payエラーが発生。
No API key provided.と言われてしまう。(PAY.JPにもクレカ情報が反映されない)
####一旦たてた仮説
本番環境で.ENVファイルを読み込めていない可能性。
####仮説を元に行った作業内容
.ENVファイルを使用するにあたり導入したgem 'dotenv-rails’が、gemfileの適切な箇所に記載されているか確認したが、テスト・開発・本番環境いずれにも対応できる箇所に記載されている。他に思い当たる原因が不明。
####その後わかった事
本番環境(EC2)でもAPI keyやmaster_keyを使えるようにするためには、/etc/environmentの中にそれらを書きこむ必要あり。
API keyやmaster_keyはgitignoreされている。デプロイして自動的に本番環境に反映される、というものではない。
本番環境の設定ファイルである/etc/environmentの中に書き込む事で使用可能になる。
####参考にさせていただいた記事
https://techtechmedia.com/team-development-deploy/
####おまけ
その後上記の通り/etc/environmentの中に書き込むも、なぜかエラー解消せず。(???)
↓
対応
(.ENVファイルに記載されたAPI秘密鍵を読み込む設定をしていましたが)
credentilas.yml.encから読み込むように、コントローラに下記記載をしたところエラー解消しました。
Payjp.api_key = Rails.application.credentials.payjp[:PAYJP_PRIVATE_KEY]
credentilas.yml.encと/etc/environment それぞれにAPI keyやmaster_keyを記入、
さらにコントローラにおいてはcredentilas.yml.encのAPI keyを読み取らせる記述をする、
という方法が確実かなと思いました。
以上、ご覧いただきありがとうございました!