Railsで環境変数が読み込まれない? .env
ファイルのトラブルシューティングと解決方法
目次
背景
Railsアプリケーションの開発中、コントローラーで環境変数を使用してAPIキーなどの秘密情報を管理することがあります。今回は、Stripe APIキーを使用して支払い処理を行う際に、.env
ファイルにAPIキーを設定し、コントローラーでこれを参照する形を取っていました。
具体的には、以下のように環境変数を設定しました。
STRIPE_KEY=your_stripe_key_here
そして、Railsコントローラーで次のようにAPIキーを使用して処理を行おうとしました。
class PaymentsController < ApplicationController
def create
Stripe.api_key = ENV['STRIPE_KEY']
# 支払い処理のコード
end
end
しかし、実際にリクエストを送信すると、設定したはずのAPIキーが認識されず、以下のエラーメッセージが返ってきました。
{"error":"No API key provided. Set your API key using \"Stripe.api_key = \u003cAPI-KEY\u003e\". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions."}
この記事では、この問題を解決するために試した手順と最終的な解決策について説明します。
コントローラーでの環境変数の利用
Railsコントローラーで環境変数を利用する際、通常はENV
オブジェクトを使用して値を取得します。今回のように、Stripe APIキーを利用して支払い処理を行う場合、以下のように設定します。
class PaymentsController < ApplicationController
def create
Stripe.api_key = ENV['STRIPE_KEY']
# 支払い処理のコード
end
end
私が試したトラブルシューティング手順
問題を解決するために、以下の手順を試しました。
Railsコンソールで環境変数を確認
まず最初に、Railsコンソールを起動し、ENV['STRIPE_KEY']
を直接確認しました。これにより、環境変数が正しく読み込まれているかどうかを確認しました。
rails console
puts ENV['STRIPE_KEY']
ここで、期待していたAPIキーが正しく表示されました。つまり、.env
ファイルが正しく読み込まれていることは確認できました。
しかし、実際にAPIリクエストを送信すると、なぜかAPIキーが認識されず、上記のエラーメッセージが返ってきました。
APIキーの有効性を確認
次に、そもそもAPIキーが無効なのではないかと考え、一度APIキーをハードコーディングで試しました。具体的には、以下のようにコントローラー内で直接APIキーを設定してテストを行いました。
class PaymentsController < ApplicationController
def create
Stripe.api_key = "your_actual_api_key_here"
# 支払い処理のコード
end
end
このテストでは、正常にリクエストが処理され、正しいレスポンスが返ってきたため、APIキー自体が無効であるという説は否定されました。
現在のRails環境がdotenv
を反映する設定になっているか確認
次に、現在のRails環境が開発環境(development
)であり、dotenv
が読み込まれる設定になっているか確認しました。Railsコンソールを再度起動して、現在の環境を確認しました。
rails console
puts Rails.env
出力結果は以下の通りです:
irb(main):001> puts Rails.env
development
=> nil
irb(main):002>
これにより、環境設定がdevelopment
であり、正しく動作していることが確認できました。
Gem 'dotenv-rails'がインストールされているか確認
次に、.env
ファイルを利用するために必要なdotenv-rails
が正しくインストールされているか確認しました。Gemfile
に以下の記述があることを確認し、bundle install
が正常に実行されていることを確かめました。
gem 'dotenv-rails', groups: [:development, :test]
サーバーの再起動を試行
これらの確認が終わった後、Railsサーバーを再起動することを試しました。
rails server
サーバーを再起動した後、再びAPIリクエストを送信すると、今度は正しくAPIキーが認識され、エラーメッセージが表示されなくなりました。
解決策:サーバーの再起動
最終的に、サーバーを再起動することで、環境変数が正しく読み込まれるようになりました。原因は、サーバーが一度起動した時点で読み込んだ環境変数を保持し続けるため、新たな変更が反映されなかったことにありました。サーバーの再起動により、.env
ファイルが再度読み込まれ、問題が解決されました。
この記事が、Rails開発における環境変数の管理やトラブルシューティングの参考になれば幸いです。再起動大事ですね。わかってたつもりでも見落としがちです。自戒の意も込めて以上を備忘録とします。