2015-09-09 3 views
0

Попытка самообучения readthedocs внутренне и имела очень мало опыта работы с Django.readthedocs self-hosting AttributeError: объект «Настройки» не имеет атрибута «REDIS»

Я выполнил все шаги на readthedocs (создал virtualenv в/usr/share/принадлежит мне с www-данными для группового владения) для веб-сервера разработки и работает отлично.

Взяли следующие дополнительные шаги для настройки WSGI и апача для selfhost:

  • установлены дополнительные зависимости

    • Sudo APT-получить установку libapache2-мод-WSGI libpq-DEV Redis-сервер
    • кд/USR/доли/readthedocs/
    • пункт установить psycopg2 Redis Джанго-Redis-кэш Джанго-Redis-сессий
    • пункт установить --upgrade hiredis
  • сконфигурированные Redis для прослушивания сокета и расслабленных разрешений на 777

апаш был настроен как виртуальный хост с:

<VirtualHost *:80> 
    ServerName docs.vagrant 

    WSGIScriptAlias//usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/wsgi.py 
    WSGIProcessGroup www-data 
    WSGIDaemonProcess www-data \ 
    python-path=/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/:/usr/share/readthedocs/lib/python2.7/site-packages/:/usr/share/readthedocs/:/usr/share/readthedocs/checkouts/readthedocs.org/:/usr/share/readthedocs/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/ 

    <Directory /usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/> 
     <Files wsgi.py> 
     Require all granted 
     </Files> 
    </Directory> 
</VirtualHost> 

а трафик, похоже, правильно подходит к серверу. Однако RTD жалуется на отсутствующий атрибут REDIS. Apache вывода журнала ошибок:

[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Starting process 'www-data' with uid=33, gid=33 and threads=15. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Initializing Python. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Attach interpreter ''. 
[wsgi:info] [pid 19596] mod_wsgi (pid=19596): Attach interpreter ''. 
[wsgi:info] [pid 19597] mod_wsgi (pid=19597): Attach interpreter ''. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/lib/python2.7/site-packages/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/checkouts/readthedocs.org/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Create interpreter 'docs.vagrant:3380|'. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/lib/python2.7/site-packages/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/checkouts/readthedocs.org/' to path. 
[wsgi:info] [pid 19595] mod_wsgi (pid=19595): Adding '/usr/share/readthedocs/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/' to path. 
[wsgi:info] [pid 19595] [remote 10.0.2.2:512] mod_wsgi (pid=19595, process='www-data', application='docs.vagrant:3380|'): Loading WSGI script '/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/wsgi.py'. 
[wsgi:info] [pid 19624] mod_wsgi (pid=19624): Initializing Python. 
[wsgi:info] [pid 19624] mod_wsgi (pid=19624): Attach interpreter ''. 
[wsgi:error] [pid 19595] [09/Sep/2015 10:30:01] WARNING [readthedocs.api.client:16] SLUMBER_USERNAME/PASSWORD settings are not set 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] mod_wsgi (pid=19595): Exception occurred processing WSGI script '/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/wsgi.py'. 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] Traceback (most recent call last): 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  self.load_middleware() 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/handlers/base.py", line 52, in load_middleware 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  mw_instance = mw_class() 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  for url_pattern in get_resolver(None).url_patterns: 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/urlresolvers.py", line 402, in url_patterns 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/urlresolvers.py", line 396, in urlconf_module 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  self._urlconf_module = import_module(self.urlconf_name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  __import__(name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/urls.py", line 8, in <module> 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  from readthedocs.api.base import (ProjectResource, UserResource, 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/api/base.py", line 28, in <module> 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  redis_client = redis.Redis(**settings.REDIS) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in __getattr__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512]  return getattr(self._wrapped, name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:512] AttributeError: 'Settings' object has no attribute 'REDIS' 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] mod_wsgi (pid=19595): Exception occurred processing WSGI script '/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/wsgi.py'. 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] Traceback (most recent call last): 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  self.load_middleware() 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/handlers/base.py", line 52, in load_middleware 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  mw_instance = mw_class() 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  for url_pattern in get_resolver(None).url_patterns: 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/urlresolvers.py", line 402, in url_patterns 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/core/urlresolvers.py", line 396, in urlconf_module 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  self._urlconf_module = import_module(self.urlconf_name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  __import__(name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/urls.py", line 8, in <module> 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  from readthedocs.api.base import (ProjectResource, UserResource, 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/api/base.py", line 28, in <module> 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  redis_client = redis.Redis(**settings.REDIS) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] File "/usr/share/readthedocs/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in __getattr__ 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327]  return getattr(self._wrapped, name) 
[wsgi:error] [pid 19595] [remote 10.0.2.2:51327] AttributeError: 'Settings' object has no attribute 'REDIS' 

Я понимаю, что также необходимо elasticsearch и правильно настроен, но я буду пересекать этот мост, когда я понимаю, что далеко.

UPDATE: Выдачи команды grep -i redis /usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/settings/* вернулся

__init__.py:  'BACKEND': 'redis_cache.RedisCache', 
__init__.py:   'PARSER_CLASS': 'redis.connection.HiredisParser' 
onebox.py:REDIS = { 
onebox.py:BROKER_URL = 'redis://localhost:6379/0' 
onebox.py:CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' 
onebox.py:  'BACKEND': 'redis_cache.cache.RedisCache', 
onebox.py:   'CLIENT_CLASS': 'redis_cache.client.DefaultClient', 
postgres.py:  'BACKEND': 'redis_cache.RedisCache', 
postgres.py:   'PARSER_CLASS': 'redis.connection.HiredisParser' 
sqlite.py:REDIS = { 
sqlite.py:BROKER_URL = 'redis://localhost:6379/0' 
sqlite.py:CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' 

поэтому я реконфигурированный Redis больше не использовать сокет и вернуться, чтобы связать/порт, но проблема сохраняется (с тем же StackTrace).

+0

Работает ли он с сервером dev? – e4c5

+0

Да, сервер dev, как вызывается «./manage.py runningerver», работает, как указано выше во втором предложении «... и это прекрасно работает». – Alasdair

+0

Извините, пропустил этот бит. Эта часть stacktrace 'redis.Redis (** настройки.REDIS) говорит, что он пытается открыть соединение с redis, используя параметры, которые вы должны иметь в ваших настройках .py - ваш файл настроек отличается от производителя и разработчика? – e4c5

ответ

0

Хорошо, прошло мимо этой проблемы. Пришлось добавить:

/usr/share/readthedocs/checkouts/readthedocs.org/readthedocs/settings/

к апача python-path.

и:

REDIS = { 
    'host': 'localhost', 
    'port': 6379, 
    'db': 0, 
} 

к postgres.py в настройках (линк из инициализации .py)

Теперь сортировать остальную часть недостающих ошибок зависимостей.