Так уж вышло, что я использую zabbix для мониторинга подручных мне серверов. Переносил тут zabbix с одного сервера на другой, и поймал странную ошибку, веб-морда zabbix'а ругается на
"Compilation failed: unknown option bit(s) set at offset 0"
всё это из-за того, что дистр у меня это смесь squeeze и sid, php стоял из sid, а libpcre3 из squeeze.
что бы решить проблему надо обновить libpcre3 до версии из sid и жестко перезагрузить апач.
Tuesday, February 22, 2011
Tuesday, January 25, 2011
mongodb, dump, restore
Иногда из бинарных дампов mongodb (сделанных с помощью mongodump) надо восстановить только чуть-чуть данных. Поднимать для всего этого отдельный инстанс mongodb бывает слишком жирно.
Но, на помощь нам придет mongorestore. У mongorestore есть параметр --filter
Т.е. что бы восстановить запись с конкретным _idшником надо сделать следующее
где host, db, collection это хост, название бд и коллекция куда мы будем восстанавливать. важно, что бы в этом "куда" не было записи с таким _id (в данном случае).
Да, _id цифровые у меня, обычно _id это ObjectId, т.е. фильтр будет {_id: ObjectId("47cc67093475061e3d95369d")}, например.
Минус такого восстановления в том, что mongorestore будет читать весь файл с коллекцией.
Но, на помощь нам придет mongorestore. У mongorestore есть параметр --filter
--filter arg filter to apply before inserting
Т.е. что бы восстановить запись с конкретным _idшником надо сделать следующее
mongorestore -h host -d db -c collection --filter "{_id:123}" ./collection.bson
где host, db, collection это хост, название бд и коллекция куда мы будем восстанавливать. важно, что бы в этом "куда" не было записи с таким _id (в данном случае).
Да, _id цифровые у меня, обычно _id это ObjectId, т.е. фильтр будет {_id: ObjectId("47cc67093475061e3d95369d")}, например.
Минус такого восстановления в том, что mongorestore будет читать весь файл с коллекцией.
Thursday, October 8, 2009
django-localeurl
Форкнул я тут django-localeurl. Что сделал?
Лежит все на битбукете.
Быдолкод? Наверное да.
- Тепреь слеш добавляется, т.е. если раньше после захода на скажем
/joinбыл редирект сначала на/en/join, а потомCommonMiddlewareредиректила на/en/join/, то сейчас сразу идет редирект на/en/join/. Код выдрал изCommonMiddleware - Язык теперь по дефолту детектится, а не берется из
settings.py. Детектится черезtranslation.get_language_from_request. Т.е. сначала смотрится в сессииdjango_language, потом смотрися в куках то, что указано вsettings.LANGUAGE_COOKIE_NAME, потом разбираетсяHTTP_ACCEPT_LANGUAGE. Если ничего не помогло, то берется дефолтный, т.е.settings.LANGUAGE_CODE. Что бы все это работало, надо что быSessionMiddlewareиAuthenticationMiddlewareбыли прописаны доLocaleURLMiddleware, т.е. необходимо, что бы и сесия и юзер были вrequest.
Лежит все на битбукете.
Быдолкод? Наверное да.
Tuesday, August 11, 2009
django, manage.py test
Как запустить юниттесты в джанго-проекте, если не используется база данных?
Правильно, прописать в
у меня получилось что-то такое:
Правильно, прописать в
settings.TEST_RUNNER свой запускальщик тестов. Можно просто скопировать (что я и сделал) стандартный джанговский django.test.simple.run_tests, убрав из него все упоминания о базе данных.у меня получилось что-то такое:
# -*- coding: utf-8 -*-
import unittest
from django.conf import settings
from django.db.models.loading import get_apps, get_app
from django.test.simple import build_test, build_suite, reorder_suite
from django.test.utils import setup_test_environment, teardown_test_environment
from django.test.testcases import TestCase
def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
setup_test_environment()
settings.DEBUG = False
suite = unittest.TestSuite()
if test_labels:
for label in test_labels:
if '.' in label:
suite.addTest(build_test(label))
else:
app = get_app(label)
suite.addTest(build_suite(app))
else:
for app in get_apps():
suite.addTest(build_suite(app))
for test in extra_tests:
suite.addTest(test)
suite = reorder_suite(suite, (TestCase,))
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
teardown_test_environment()
return len(result.failures) + len(result.errors)
Tuesday, August 4, 2009
tempfile.NamedTemporaryFile и zipfile.ZipFile
Суть этого поста в том, что надо никогда не забывать делать
Мой пример совсем простой, делаю файл через
flush() на открытом файле, из которого потом собираемся читать.Мой пример совсем простой, делаю файл через
tempfile.NamedTemporaryFile, делаею архив, пишу в архив этот файл через ZipFile.write(). flush() перед ZipFile.write сделать забыл и словил "подземный стук", вроде пишем все как надо, а в архиве файл немного поменьше..
Friday, July 17, 2009
wapi, PaginatedSerializeResponse
использовать это чудо просто, в методе возвращаем что-то типа
где books.object_list -- что-то у чего есть __iter__, page -- номер страницы, num_pages -- кол-во страниц.
return PaginatedSerializeResponse(books.object_list, page=page,
num_pages=num_pages, cname="books")где books.object_list -- что-то у чего есть __iter__, page -- номер страницы, num_pages -- кол-во страниц.
# -*- coding: utf-8 -*-
from wapi.responses import SerializableResponse
from wapi.formatters import get_formatter
from wapi.serializers import get_object_serialization
def serialize_paginated(format, objs, method, out=None, **kwargs):
fmt = get_formatter(format)(out=out)
fmt.start()
page = kwargs.get('page', 1)
num_pages = kwargs.get('num_pages', 1)
cname = kwargs.get('cname', 'objects')
if objs is None or len(objs) == 0:
s_objects = []
else:
s_objects = [get_object_serialization(obj, method).\
apply(obj, **kwargs)[1] for obj in objs]
presponse = {
'page': page,
'num_pages': num_pages,
cname: s_objects,
}
fmt.format(('paginatedobjects', presponse))
fmt.end()
return fmt.get()
class PaginatedSerializeResponse(SerializableResponse):
def transform(self, cls):
return cls(self.objs, self.method, serialize=serialize_paginated,
*self.args, **self.kwargs)
Subscribe to:
Comments (Atom)