質問: env('SECRET_KEY') ``` ### 試したこと django-environの前はpythonファイルを作成し、そこに秘匿変数を書いていたのですが、結局どちらもgitignoreしてしまうと本番環境で読み込めずエラーが出てしまいました。 ### 補足情報(FW/ツールのバージョンなど) サーバーはHerokuです。
回答: > > django-environの前はpythonファイルを作成し、そこに秘匿変数を書いていたのですが、結局どちらもgitignoreしてしまうと本番環境で読み込めずエラーが出てしまいました。 > > > この「pythonファイル」というのは `settings.py` の中の一部の設定を記述した独自のファイルで、それを `settings.py` から読み込まれていた、という理解で正しいですか? また、「秘匿変数」というのは何でしょう? `SECRET_KEY` や `DATABASE_URL` のことをそう呼ばれているのですか? いずれの質問もお答えは「はい」だと仮定して以下回答させていただきます。認識が違っていれば教えてください。 > > .gitignoreには.envをgit管理から外すよう記載したのですが、そうすると本番環境で.envからSECRET_KEY等々を読み込めずにエラーが出てしまいます。 > > > もし `.env` が存在することを前提としたコードを書かれていて、 `.env` を Heroku 環境に push しないように変更されたのであれば、 Heroku 環境でエラーが出るのはむしろ当然なのではないかと思います。 最終的にどのような形で運用されたいのかわからないので的外れな意見かもしれませんが、例えば、「お手元の開発環境では `.env` を利用し、本番環境では環境変数をそのまま利用する形」にされたいのであれば、 `settings.py` では次のように記述しておき、ローカルでは常に `DEBUG=True` とする、 Heroku 上は管理画面から環境変数をセットする、という風にされるとよいかと思います。 ``` if DEBUG: environ.Env.read_env('.env') ``` もしくは、(本番環境で warning が出てしまう気がしますが)次のようにすると、 `.env` ファイルが存在するときだけ読み込む挙動にできそうなので、 `DEBUG` を使った分岐をされたくなければこの方向でよい形を模索されるとよいのではないでしょうか( `django-environ` のコード をちらっと読んでこう思っていますが、私の手元で動作確認はしていません。間違っていればすいません)。 ``` - environ.Env.read_env('.env') + environ.Env.read_env() ``` ご参考になればと思います。