2
1

More than 1 year has passed since last update.

【Django】 django-environでシークレットキーを読み込んだ際に起こりうるエラー

Last updated at Posted at 2022-01-27

はじめに

・django-environを使用し、シークレットキーを読み取れなかった時の対処法を書きます。

今回些細すぎるミスにより、4時間ほど解決のために時間を費やしたので、自分への戒めと備忘録として書きます。
また、どの記事にも単純なミスすぎて記載されてなかったので、記事を書きます。

前提

  • Python 3.9.7
  • Django 3.2.5
  • django-environ 0.4.5
  • 仮想環境
    • venv

解決方法

環境におけるdatabase.ymlを参照できていなかった。今回はcredintialsにdatabase.ymlのデータベースの設定を入れ、参照させることで解消した。

app
├── base
├── config
│   └── settings.py
├── manage.py
├── requirements.txt
└── secrets
    ├── .env.dev
    └── .env.prod

今回、開発環境でシークレットキーを渡したかったため、「.env.dev」ファイルとしています。

secrets/.env.dev
SECRET_KEY=「シークレットキー」  #「」は不要です
DEBUG=True
ALLOWED_HOSTS=*
config/settings.py

from pathlib import Path
import environ #追記

BASE_DIR = Path(__file__).resolve().parent.parent

#追記
env = environ.Env()
root = environ.Path(BASE_DIR / 'secrets') #manage.pyの階層にあるsecretsを読み込む

#下記の二つはif文で本番と開発環境を分けると後々楽です。
# 本番環境用
# env.read_env(root('.env.prod'))

# 開発環境用
env.read_env(root('.env.dev'))

#シークレットキーはギットハブに絶対にあげない
SECRET_KEY = env('SECRET_KEY')

DEBUG = env.bool('DEBUG')

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

動作確認

python manage.py runsevere

こちらで問題なく動作するはずが

raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable

前提のコードで記述するとこういうエラーが出ます。

考えられる原因

考えられる原因は2点考えられると思います。
1つ目

root = environ.Path(BASE_DIR / 'secrets')
env.read_env(root('.env.dev'))

ここの記述が間違えており、env.read_envで読み込めていない。

2つ目
こちらは前提の記述

SECRET_KEY=「シークレットキー」  #「」は不要です

もしこちらが

SECRET_KEY= 「シークレットキー」  #「」は不要です

上記のように = と「シークレットキー」の間に無駄な余白があれば上手く読み込めないエラーになります。

でも読み込めていない原因は上記の二つではありませんでした

解決方法

単純にタイプミスでした。

前提↓

SECRET_KEY=「シークレットキー」  #「」は不要です

解決できるコード↓

SECRET_KEY=「シークレットキー」  #「」は不要です

お分かりかもしれませんが、「=」がかな文字の「=」でした。

おわりに

くだらない記事を最後まで見て頂いてありがとうございます。
現在未経験で、知見も技術もない初学者ですが、こういうミスでプログラムが動かなくなるんだと知ることができたのでよかったかもしれません、、

同じように「シークレットキー」が何故か読み取れないみたいな人は、「=」も注意して見て欲しいです。

誰かのお役に立つことを願っております。
誠にありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1