首页 > 解决方案 > Graphite django-admin.py raise ImproperlyConfigured("SECRET_KEY 设置不能为空或没有名为 'graphite' 的模块

问题描述

我正在尝试在 Ubuntu 16.04 上安装 Graphite。django-admin.py raise ImproperlyConfigured("SECRET_KEY 设置不能为空。

如果我将 export GRAPHITE_ROOT=/opt/graphite 更改为:

export GRAPHITE_ROOT=/opt/graphite/webapp

我不再收到 SECRET_KEY 错误,但我得到:

File "/opt/graphite/lib/python3.5/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/opt/graphite/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'graphite'

我按照这些说明执行了以下步骤:

sudo apt-get install python-dev libcairo2-dev libffi-dev build-essential

wget https://launchpad.net/graphite/0.9/0.9.10/+download/graphite-web-0.9.10.tar.gz

wget https://launchpad.net/graphite/0.9/0.9.10/+download/carbon-0.9.10.tar.gz

wget https://launchpad.net/graphite/0.9/0.9.10/+download/whisper-0.9.10.tar.gz

wget https://launchpad.net/graphite/0.9/0.9.10/+download/check-dependencies.py


tar xvf whisper-0.9.10.tar.gz 
tar xvf carbon-0.9.10.tar.gz 
tar xvf graphite-web-0.9.10.tar.gz 

cd carbon-0.9.10/

sudo python setup.py install

cd whisper-0.9.10/
sudo python setup.py install

cd graphite-web-0.9.10/
sudo python setup.py install

sudo virtualenv /opt/graphite
source /opt/graphite/bin/activate

sudo chown -R ubuntu:ubuntu /opt/graphite

pip install Django 
pip install pytz scandir 
pip install django-tagging 
pip install pycairo

sudo apt install apache2

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz

tar xvf 4.6.5.tar.gz 
cd mod_wsgi-4.6.5/
sudo ./configure 
sudo make install

cd /opt/graphite/conf
cp graphite.wsgi.example graphite.wsgi

cd /opt/graphite/webapp/graphite
cp local_settings.py.example local_settings.py

export $GRAPHITE_ROOT=/opt/graphite

PYTHONPATH=$GRAPHITE_ROOT/webapp /opt/graphite/lib/python3.5/site-packages/django/bin/django-admin.py collectstatic --noinput --settings=graphite.settings

产生此错误:

File "/opt/graphite/lib/python3.5/site-packages/django/bin/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/core/management/__init__.py", line 182, in fetch_command
    settings.INSTALLED_APPS
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

我相信这样做的原因是 django 被安装在 virtualenv 和 $DJANGO_HOME 中。说明说在使用 virtualenv 时将完整路径放入 django-admin.py,我这样做了。

因此它是从错误的位置读取 global_settings.py 还是在错误的位置寻找 local_settings.py。

./opt/graphite/bin/django-admin.py
./opt/graphite/lib/python3.5/site-packages/django/bin/django-admin.py

这两个都有:

SECRET_KEY = ''

另外,我尝试在两者中都设置一个值,如果您查看引发错误的代码,则不需要该值,它只查找该字段的存在而不是该字段是否为空。

SECRET_KEY = '1232323'

./opt/graphite/lib/python3.5/site-packages/django/conf/global_settings.py
./home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/conf/global_settings.py

这是在 /home/ubuntu/.pyenv/versions/3.4.3/lib/python3.4/site-packages/django/conf/init .py 中引发错误的代码

if not self.SECRET_KEY:
            raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")

标签: graphite

解决方案


0.9.10 是非常旧的版本(2012 年 5 月,超过 7 年前),它不支持 Python 3。如果你想从源代码安装 Graphite,请尝试最新版本(1.1.5)。

但是您也可以从软件包中安装它(虽然版本有点旧,在 Ubuntu 16.04 中是 0.9.15)。您可以使用社区编写的更多特定于发行版的手册。例如https://www.scaleway.com/en/docs/install-and-configure-graphite-on-ubuntu/https://www.vultr.com/docs/how-to-install-and-configure-石墨-on-ubuntu-16-04

您还可以在 Docker 中尝试 Graphite - 它是运行最新版本的快速便捷方式,且麻烦最少。


推荐阅读