@Ozrae

Как правильно защитить пароли и секретные ключи когда создаешь приложение на heroku?

В settings.py пишется секретный ключ и данные для входа в базу данных. Я создал новый файл keys.py в той же директории с settings.py, создал переменные и в качестве значений вписал секретный ключ и все что связано с базой данных. Этот файл добавил в gitignore. Таким образом, вроде скрыл все секреты. Но когда я хотел обновить приложение на heroku(он уже был добавлен туда), то он выводит мне ошибку, что не удалось импортировать keys.py (не видит файл скорее всего из-за того, что он у меня в gitignore). Как быть?

Вот так выглядит мой settings.py:
from . import keys

SECRET_KEY = keys.secret_key

DATABASES = {
    'default': {
        'ENGINE': keys.db_engine,
        'NAME': keys.db_name,
        'USER': keys.db_user,
        'PORT': keys.db_port,
        'PASSWORD': keys.db_password,
        'HOST': keys.db_host,
    }
}


Вот полный лог ошибки после того как я ввел git push heroku master:
remote: -----> $ python manage.py collectstatic --noinput
remote:        Traceback (most recent call last):
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 224, in fetch_command     
remote:            app_name = commands[subcommand]
remote:        KeyError: 'collectstatic'
remote:        During handling of the above exception, another exception occurred:
remote:        Traceback (most recent call last):
remote:          File "manage.py", line 21, in <module>
remote:            main()
remote:          File "manage.py", line 17, in main
remote:            execute_from_command_line(sys.argv)
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
remote:            utility.execute()
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
remote:            self.fetch_command(subcommand).run_from_argv(self.argv)
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 231, in fetch_command     
remote:            settings.INSTALLED_APPS
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 76, in __getattr__
remote:            self._setup(name)
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 63, in _setup
remote:            self._wrapped = Settings(settings_module)
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 142, in __init__
remote:            mod = importlib.import_module(self.SETTINGS_MODULE)
remote:          File "/app/.heroku/python/lib/python3.8/importlib/__init__.py", line 127, in import_module
remote:            return _bootstrap._gcd_import(name[level:], package, level)
remote:          File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
remote:          File "<frozen importlib._bootstrap>", line 991, in _find_and_load
remote:          File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
remote:          File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
remote:          File "<frozen importlib._bootstrap_external>", line 783, in exec_module
remote:          File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
remote:          File "/tmp/build_77a98f2ac83490e663d0fc6b665daf9c/project/settings.py", line 2, in <module>
remote:            from . import keys
remote:        ImportError: cannot import name 'keys' from 'project' (/tmp/build_77a98f2ac83490e663d0fc6b665daf9c/project/__init__.py)     
remote:
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote:
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote:
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote:
remote:        https://devcenter.heroku.com/articles/django-assets
remote:  !     Push rejected, failed to compile Python app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to infinite-river-34996.
remote:
To https://git.heroku.com/infinite-river-34996.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/infinite-river-34996.git'
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@masb
В keys.py у вас ключи в открытом виде???
Нужно всегда использовать environment variable
и тогда в коде
SECRET_KEY = os.getenv("DJANGO_SECRET")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы