繁体   English   中英

如何让 python-decouple 在实时服务器上工作?

[英]How to get python-decouple to work on a live server?

我似乎无法让 python-decouple 在实时服务器上工作。 我有一个 Django 项目,其中 python-decouple 用于在 .env 文件中分隔我的重要变量,例如密钥、调试、数据库变量等。 当项目在本地运行时,python-decouple 运行良好,我没有问题。

在确认它在本地运行良好后,我将 .env 文件添加到我的 .gitignore 文件中,将代码推送到我的 GitHub 存储库,然后将代码拉取到 AWS 实时服务器。

但是,当在 AWS EC2 Ubuntu 服务器上配置项目时尝试进行迁移时,我收到以下错误。 似乎 .env 文件中的变量没有被应用到 AWS Ubuntu 服务器上,因为 .gitignore 文件是有意义的。 但我认为 python-decouple 的全部意义在于在实时服务器上没有重要的变量。 有谁知道为什么会发生这个错误? 以及我该如何解决? 还是不完全理解 python-decouple 的用例?

$ python manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 345, in execute
    settings.INSTALLED_APPS
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/django/conf/__init__.py", line 76, in __getattr__     
    self._setup(name)
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/django/conf/__init__.py", line 63, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/django/conf/__init__.py", line 142, in __init__       
    mod = importlib.import_module(self.SETTINGS_MODULE)    
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, 
in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/theo/aggtrends/aggregatetrends/settings.py", 
line 26, in <module>
    SECRET_KEY = config('SECRET_KEY')
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/decouple.py", line 199, in __call__
    return self.config(*args, **kwargs)
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/decouple.py", line 83, in __call__
    return self.get(*args, **kwargs)
  File "/home/theo/aggtrends/aggenv/lib/python3.6/site-packages/decouple.py", line 68, in get
    raise UndefinedValueError('{} not found. Declare it as 
envvar or define a default value.'.format(option))
decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value.

是的,您不应将易受攻击的数据(例如.env文件)存储在公共存储库中。

但是,您应该在服务器端再次创建它。

  1. 连接到服务器
  2. 转到项目文件夹
  3. 创建.env文件并使用您使用的所有必要变量来完成它。

根据我的发现,我认为只有一种方法可以使用每种环境,无论是本地服务器还是实时服务器。 首先,您需要安装 python-decouple 库和 .env 文件,如下所示:

  1. 安装 Python 解耦:

    pip 安装 python 解耦

  2. 在项目的根目录中创建一个 .env 文件,并按照此格式在文件中定义环境变量。

    SECRET_KEY = secret_key_for_app_you_may_use_code_to_it_unique

    DATABASE_NAME = name_of_your_database

    DATABASE_USER = your_database_username

    DATABASE_PASSWORD = your_database_password

请注意,变量的值中没有引号。 3、在settings.py中导入config方法,使用它来调用这些变量,如下:

from decouple import config

现在使用 config 方法在适当的地方调用变量

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': config('DATABASE_NAME'),
    'USER': config('DATABASE_USER'),
    'PASSWORD': config('DATABASE_PASS'),
    'HOST': 'localhost'
}
}

使用这种方法,如果您托管在使用 CLI 或 Cpanel 的服务器上,它们将在任何一种方式下都可以正常工作,无论是通过将 .env 文件上传到您的 Web 服务器(Cpanel)并按照我在此处所做的操作或添加环境变量在带有键值对的 Python 应用程序下,安装 Python-Decouple,在 settings.py 中从 decouple 导入配置,然后如上所示调用它们。 我认为这应该对你有所帮助。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM