WSGI — импорт пользовательских классов

Настройка следующая: Apache с WSGI успешно настроен и работает в приложении с голыми костями.

import sys

# Path of the directory where scripts directory is located.
sys.path.insert(0, 'C:\\Users\\xxx\\Documents\\Programming\\www\\scripts')

from Blog import Blog #Blog.py is a file in the scripts directory

def application(environ, start_response):
    status = '200 OK'
    output = ''

    b = Blog()

    for key in environ.keys():
        output = output + str(key) + ' : ' + str(environ[key]) + '<br/>'

    output = "Test: " + b.title + "<br/>" + b.text + "<br/>" + output
    output = b.get_blog() + "<br/>" + output

    response_headers = [('Content-type', 'text/html'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

соответствующие части Blog.py выглядят так

class Blog:

#blogid is a str
def get_blog(self):
        conn = sqlite3.connect(self.database)
        c = conn.cursor()
        # get the blog
        c.execute('select * from blogs')
        results = []
        for row in c:
                results.append(row)
        c.close()
        return results

Журнал ошибок Apache дает мне:

line 21, in application
output = b.get_blog() + "<br/>" + output
AttributeError: Blog instance has no attribute 'get_blog'

Изменение b.get_blog на str(dir(b)) дает мне: ['doc', 'init', 'module', 'get_data', 'text', 'title'], который является старой версией класса Blog, которую я недавно включил в файл wsgi. Я не могу найти, где он кэшируется, или почему он не перезаписывается при импорте блога, потому что, если я изменю импорт, чтобы просто импортировать блог и создание экземпляра в Blog.Blog(), он все равно дает то же содержимое каталога.


person Bjorn    schedule 30.07.2011    source источник


Ответы (1)


Импортированные модули имеют атрибут «__file__». Распечатайте это, он скажет вам, где находится файл, загруженный для модуля. Тогда вы сможете урегулировать конфликт.

Возможно, версия где-то в пути поиска модуля или это может быть старый файл .pyc.

person Graham Dumpleton    schedule 30.07.2011
comment
C:\Users\xxx\Documents\Programming\www\scripts\Blog.py - person Bjorn; 31.07.2011
comment
file = C:\Users\xxx\Documents\Programming\www\scripts\Blog.py... это правильный путь. Пробовал удалять файлы pyc... но в итоге разобрался. Если я изменю файл wsgi, мне нужно перезапустить Apache... отлично. Великолепное исправление всего (что-то, что, как мне казалось, я делал много раз) исправляет все это. Теперь я чувствую себя глупо :D - person Bjorn; 31.07.2011