这次的问题是在openstack搭建好之后,dashboard本身是能用的,但是在某一天后,突然发现打开dashboard后出现Internal Server Error. 于是乎在网上找答案但是没有,那就自己动手解决吧。
首先打开dashboard的log文件,我的是:etc/httpd/logs/horizon_error.log.
发现下面的error 信息:
2015-04-28 01:39:55.380169 Traceback (most recent call last):
2015-04-28 01:39:55.380313 File "/opt/stack/horizon/openstack_dashboard/wsgi/django.wsgi", line 14, in <module>
2015-04-28 01:39:55.380466 application = get_wsgi_application()
2015-04-28 01:39:55.380557 File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application
2015-04-28 01:39:55.380659 django.setup()
2015-04-28 01:39:55.380740 File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 20, in setup
2015-04-28 01:39:55.380837 configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
2015-04-28 01:39:55.380939 File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 46, in __getattr__
2015-04-28 01:39:55.381056 self._setup(name)
2015-04-28 01:39:55.381140 File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
2015-04-28 01:39:55.381250 self._wrapped = Settings(settings_module)
2015-04-28 01:39:55.381337 File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 94, in __init__
2015-04-28 01:39:55.381435 mod = importlib.import_module(self.SETTINGS_MODULE)
2015-04-28 01:39:55.381518 File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
2015-04-28 01:39:55.381665 __import__(name)
2015-04-28 01:39:55.381751 File "/opt/stack/horizon/openstack_dashboard/wsgi/../../openstack_dashboard/settings.py", line 263, in <module>
2015-04-28 01:39:55.381886 from local.local_settings import * # noqa
2015-04-28 01:39:55.381977 File "/opt/stack/horizon/openstack_dashboard/wsgi/../../openstack_dashboard/local/local_settings.py", line 117, in <module>
2015-04-28 01:39:55.382078 os.path.join(LOCAL_PATH, '.secret_key_store'))
2015-04-28 01:39:55.382174 File "/opt/stack/horizon/openstack_dashboard/wsgi/../../horizon/utils/secret_key.py", line 63, in generate_or_read_from_file
2015-04-28 01:39:55.382377 raise FilePermissionError("Insecure key file permissions!")
2015-04-28 01:39:55.382494 FilePermissionError: Insecure key file permissions!
初步判断是文件的权限问题,根据os.path.join(LOCAL_PATH, '.secret_key_store') 找到/opt/stack/horizon/openstack_dashboard/local/.secret_key_store, 并发现对这个文件拥有所有的权限,很奇怪为啥会出现permission的问题 于是查看源码,发现没有这个文件,所以这个文件应该是新生成的,至于为什么会生成,不知道。
然后决定删除这个文件,再次刷新dashboard的url,很神奇的是work了,然后再次查看该文件夹,发现该目录下还是新产生了这个文件,并且权限和上图一样。
SECRET_KEY(New in version 2012.1(Essex)) 设置一个自定义的密钥:你可以将它设置为一个特定的值,或者你可以让horizon上生成一个默认的密钥在本机上,无论Python WSGI(如果使用在Apache + mod_wsgi)。在许多情况下,你会想把它设定,例如当多个dashboard实例分布在不同的机器上(通常在一个负载均衡器)。你必须确保会话获取所有请求路由到相同的dashboard实例或你为它们设置相同的secret_key。 From horizon.utils import secret_key:
SECRET_KEY = secret_key.generate_or_read_from_file(
os.path.join(LOCAL_PATH, '.secret_key_store'))
local_settings.py.example文件包括一个快速和容易的方法来生成一个单一的安装密钥。