dashBoard源码启动,django.conf.Settings没有OPENSTACK_K...

    下载openstack f3 版本的Dashboard.启动报错,主要是django.conf.Settings 没有OPENSTACK_KEYSTONE_URL属性,不行那就调试看看吧。python

    /home/xuegang/horizon-2012.2/tools/with_venv.sh python  -m pdb /home/xuegang/horizon-2012.2/manage.py runserverdjango

     跟踪代码到:app

(Pdb) c
> /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/utils/functional.py(183)inner()
-> if self._wrapped is empty:
(Pdb) list
179 
180     empty = object()
181     def new_method_proxy(func):
182         def inner(self, *args):
183 B           if self._wrapped is empty:
184 B->             self._setup()
185 B           return func(self._wrapped, *args)
186         return inner
187 
188     class LazyObject(object):
189         """ssh

进入184行的函数:
(Pdb) s
--Call--
> /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/__init__.py(27)_setup()
-> def _setup(self):
(Pdb) list
 22         """
 23         A lazy proxy for either global Django settings or a custom settings object.
 24         The user can manually configure settings prior to using them. Otherwise,
 25         Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
 26         """
 27  ->     def _setup(self):
 28             """
 29             Load the settings module pointed to by the environment variable. This
 30             is used the first time we need any settings at all, if the user has not
 31             previously configured the settings manually.
 32    函数

---------------继续跟进oop

(Pdb) n
> /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/__init__.py(42)_setup()
-> self._wrapped = Settings(settings_module)
(Pdb) list
 37             except KeyError:
 38                 # NOTE: This is arguably an EnvironmentError, but that causes
 39                 # problems with Python's interactive help.
 40                 raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
 41 
 42  ->         self._wrapped = Settings(settings_module)
 43 
 44         def configure(self, default_settings=global_settings, **options):
 45             """
 46             Called to manually configure the settings. The 'default_settings'
 47             parameter sets where to retrieve any unspecified values from (its
(Pdb) pp settings_module
'openstack_dashboard.settings'测试

42行开始构造Settings 对象,继续进入:
(Pdb) s
--Call--
> /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/__init__.py(83)__init__()
-> def __init__(self, settings_module):
(Pdb) list
 78                     "to a tuple, not a string.")
 79             object.__setattr__(self, name, value)
 80 
 81 
 82     class Settings(BaseSettings):
 83  ->     def __init__(self, settings_module):
 84             # update this dict from global settings (but only for ALL_CAPS settings)
 85             for setting in dir(global_settings):
 86                 if setting == setting.upper():
 87                     setattr(self, setting, getattr(global_settings, setting))
 88 
(Pdb) 这几句代码直接是吧global_settings 大写的属性和值往Self里面塞 ,打印出来看看
(Pdb) pp global_settings
<module 'django.conf.global_settings' from '/home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/global_settings.pyc'>
(Pdb) dir(global_settings)
['ABSOLUTE_URL_OVERRIDES', 'ADMINS', 'ADMIN_FOR', 'ALLOWED_INCLUDE_ROOTS', 'APPEND_SLASH', 'AUTHENTICATION_BACKENDS', 'CACHES', 'CACHE_MIDDLEWARE_ALIAS', 'CACHE_MIDDLEWARE_KEY_PREFIX', 'CACHE_MIDDLEWARE_SECONDS', 'COMMENTS_ALLOW_PROFANITIES', 'CSRF_COOKIE_DOMAIN', 'CSRF_COOKIE_NAME', 'CSRF_COOKIE_PATH', 'CSRF_COOKIE_SECURE', 'CSRF_FAILURE_VIEW', 'DATABASES', 'DATABASE_ROUTERS', 'DATETIME_FORMAT', 'DATETIME_INPUT_FORMATS', 'DATE_FORMAT', 'DATE_INPUT_FORMATS', 'DEBUG', 'DEBUG_PROPAGATE_EXCEPTIONS', 'DECIMAL_SEPARATOR', 'DEFAULT_CHARSET', 'DEFAULT_CONTENT_TYPE', 'DEFAULT_EXCEPTION_REPORTER_FILTER', 'DEFAULT_FILE_STORAGE', 'DEFAULT_FROM_EMAIL', 'DEFAULT_INDEX_TABLESPACE', 'DEFAULT_TABLESPACE', 'DISALLOWED_USER_AGENTS', 'EMAIL_BACKEND', 'EMAIL_HOST', 'EMAIL_HOST_PASSWORD', 'EMAIL_HOST_USER', 'EMAIL_PORT', 'EMAIL_SUBJECT_PREFIX', 'EMAIL_USE_TLS', 'FILE_CHARSET', 'FILE_UPLOAD_HANDLERS', 'FILE_UPLOAD_MAX_MEMORY_SIZE', 'FILE_UPLOAD_PERMISSIONS', 'FILE_UPLOAD_TEMP_DIR', 'FIRST_DAY_OF_WEEK', 'FIXTURE_DIRS', 'FORCE_SCRIPT_NAME', 'FORMAT_MODULE_PATH', 'IGNORABLE_404_URLS', 'INSTALLED_APPS', 'INTERNAL_IPS', 'LANGUAGES', 'LANGUAGES_BIDI', 'LANGUAGE_CODE', 'LANGUAGE_COOKIE_NAME', 'LOCALE_PATHS', 'LOGGING', 'LOGGING_CONFIG', 'LOGIN_REDIRECT_URL', 'LOGIN_URL', 'LOGOUT_URL', 'MANAGERS', 'MEDIA_ROOT', 'MEDIA_URL', 'MESSAGE_STORAGE', 'MIDDLEWARE_CLASSES', 'MONTH_DAY_FORMAT', 'NUMBER_GROUPING', ,'PASSWORD_HASHERS', 'PASSWORD_RESET_TIMEOUT_DAYS', 'PREPEND_WWW', 'PROFANITIES_LIST', 'SECRET_KEY', 'SECURE_PROXY_SSL_HEADER', 'SEND_BROKEN_LINK_EMAILS', 'SERVER_EMAIL', 'SESSION_COOKIE_AGE', 'SESSION_COOKIE_DOMAIN', 'SESSION_COOKIE_HTTPONLY', 'SESSION_COOKIE_NAME', 'SESSION_COOKIE_PATH', 'SESSION_COOKIE_SECURE', 'SESSION_ENGINE', 'SESSION_EXPIRE_AT_BROWSER_CLOSE', 'SESSION_FILE_PATH', 'SESSION_SAVE_EVERY_REQUEST', 'SHORT_DATETIME_FORMAT', 'SHORT_DATE_FORMAT', 'SIGNING_BACKEND', 'STATICFILES_DIRS', 'STATICFILES_FINDERS', 'STATICFILES_STORAGE', 'STATIC_ROOT', 'STATIC_URL', 'TEMPLATE_CONTEXT_PROCESSORS', 'TEMPLATE_DEBUG', 'TEMPLATE_DIRS', 'TEMPLATE_LOADERS', 'TEMPLATE_STRING_IF_INVALID', 'TEST_RUNNER', 'THOUSAND_SEPARATOR', 'TIME_FORMAT', 'TIME_INPUT_FORMATS', 'TIME_ZONE', 'TRANSACTIONS_MANAGED', 'URL_VALIDATOR_USER_AGENT', 'USE_ETAGS', 'USE_I18N', 'USE_L10N', 'USE_THOUSAND_SEPARATOR', 'USE_TZ', 'USE_X_FORWARDED_HOST', 'WSGI_APPLICATION', 'X_FRAME_OPTIONS', 'YEAR_MONTH_FORMAT', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'get_version', 'gettext_noop']
(Pdb) ui

这里已经很明白了,在 /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/global_settings.py 没有OPENSTACK_KEYSTONE_URL属性,那就添加上去。this

----------------------------------------------继续看看测试状况。spa

(Pdb) list
 82     class Settings(BaseSettings):
 83         def __init__(self, settings_module):
 84             # update this dict from global settings (but only for ALL_CAPS settings)
 85             for setting in dir(global_settings):
 86                 if setting == setting.upper():
 87  ->                 setattr(self, setting, getattr(global_settings, setting))
 88 
 89             # store the settings module in case someone later cares
 90             self.SETTINGS_MODULE = settings_module
 91 
 92             try:
(Pdb) n
> /home/xuegang/horizon-2012.2/.venv/lib/python2.6/site-packages/django/conf/__init__.py(85)__init__()
-> for setting in dir(global_settings):
(Pdb) dir(self)
['ABSOLUTE_URL_OVERRIDES', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
(Pdb) self
<django.conf.Settings object at 0x13fe650>
(Pdb)

这里也证明了上面的结论。

Python代码一步一步调试,多打印,总可以发现问题所在,增长研究地信心。

相关文章
相关标签/搜索