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代碼一步一步調試,多打印,總可以發現問題所在,增長研究地信心。

相關文章
相關標籤/搜索