LINUX.ORG.RU

Сообщения whitemaster

 

Отслеживание изменений в m2m поле модели

Форум — Development

Добрый день, Коллеги! Вот застрял на такой задаче: Имеется тип, имеется категория, сущности относятся друг к другу как м2м. Категории имеют иерархию, реализованную через mptt.

Требуется при добавлении через админку связи тип-категория добавить к данному типу связь со всеми дочерними категориями данной.

Нашёл в интернете совет явно указать таблицу связи посредством through, и в метод save данной таблицы добавить свою логику, но этот метод не вызывается. В чём причина - я не знаю.

Код:

class AdType(models.Model):
    """
    Класс для типов
    """
    name = models.CharField(_(u'Название'), max_length=100)
    slug = models.SlugField(_(u'Слаг'), max_length=50, unique=True, help_text=_(u'Наименование в URL'))
    created_date = models.DateTimeField(_(u'Дата создания'), auto_now_add=True)
    updated_date = models.DateTimeField(_(u'Дата обновления'), auto_now=True)
    active = models.BooleanField(default=True, verbose_name=_(u'Включён'))
    position = models.PositiveIntegerField(_(u'Позиция'), default=1, help_text=_(u'Влияет на порядок отображения списка типов'))
    sites = models.ManyToManyField(Site, verbose_name=_(u'Сайты'), help_text=_(u'Отображать тип на следующих сайтах'))
    categories = models.ManyToManyField(Category, verbose_name=_(u'Категории'), help_text=_(u'Категории для данного типа объявлений'), related_name='types', through='AdTypeToCategories')

    objects = BatchManager()

    class Meta:
        ordering = ['position']
        verbose_name = _(u'тип')
        verbose_name_plural = _(u'Типы')

    def __unicode__(self):
        return self.name


class AdTypeToCategories(models.Model):
    ad_type = models.ForeignKey(AdType)
    category = models.ForeignKey(Category)

    def save(self, *args, **kwargs):
        self.add_category()
        super(AdTypeToCategories, self).save(*args, **kwargs)

    def add_category(self):
        """
        При выборе категорий выбирает и все дочерние категории
        При снятие категории, снимает и со всех дочерних
        """

        # Если это новая категория
        if not self.pk:
            # То добавим все её дочерние категории
            child_categories = self.category.get_children()
            self.ad_type.categories.add(child_categories)
            self.ad_type.save()

    class Meta:
        db_table = 'catalog_adtype_categories'
        auto_created = AdType
Есть идеи как решить задачу? И почему метод save AdTypeToCategories не вызывается?

Помню, в Django есть оптимизация для массового редактирования, возможно на неё я и попал, а как её явно обойти - не помню.

 ,

whitemaster
()

не работает subwoofer в Asus n550jv

Форум — Desktop

Приветствую собратья! Прикупил себе игрушку, топовый ноут из N серии Asus, а с новыми машинками в Linux частенько не всё гладко, ну вот у этого не работает саб под Ubuntu 13.10, который идёт в комплекте. Собственно: https://bugzilla.kernel.org/show_bug.cgi?id=65091 Что-то пытался сделать, как написано и не выходит, не особо хорошо разбираюсь в особенностях alsa, так что не знаю как починить, помогите!

 , ,

whitemaster
()

/etc/fstab не монтирует диск

Форум — Admin

Добрый вечер, коллеги. Занимаюсь конфигурированием сервера на Debian. Появилась необходимость примонтировать диск. Когда монтирую командой mount всё монтируется без проблем, когда пытаюсь монтировать через /etc/fstab - не монтируется, собственно почему? Прикрепляю файлик /etc/fstab:

proc /proc proc defaults 0 0
# /dev/sda1 during Installation (RescueSystem)
UUID=099c803a-6496-4695-93e4-1b052c14a9e4 /boot ext3 defaults 0 0
# /dev/sda2 during Installation (RescueSystem)
UUID=b1e271ef-c5cb-43ba-b8a5-7e6bdcd8160b / ext4 defaults 0 0
/dev/sdb1 /var/www/ee24/media user,auto,rw 0 0
/dev/sdb2 /var/log user,auto,rw 0 0
/dev/sdb3 /tmp user,auto,rw 0 0

может глаз замылился, пропустил чего?

кажись заметил, ext4 забыл... сейчас поменяю

 , ,

whitemaster
()

MySQL сильно потребляет процессор

Форум — Admin

Доброго времени суток, уважаемые коллеги. Столкнулся я вот с такой проблемой: хотели увеличить скорость работы сайта, за счёт увеличения кэшей в озу и перехода на SSD переехали c: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz 8 GB RAM 200GB HDD на сервер: AMD Opteron 3280 8 x 2,4 GHz 32 GB RAM 250GB SSD

А получили напротив жёсткие тормоза в часы пик. Сейчас пишу пост, всё летает, а по вечерам - тормоза. MySQL жрёт ЦПУ ядер 5, load average 12-15 иногда даже до 30 доходит. Наши характеристики в часы пик ~75 посетителей онлайн, количество запросов в секунду почему-то после переезда выросло с 8 до 30, в то же время посещаемость сильно не изменилась.

Уже так и этак колдую с конфигом, c mysqltuner'ом и руками, немного ситуацию улучшил конечно, но проблема не уходит, скорость в часы пик ниже чем до переезда. Вот какой конфиг получился:

[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
lc-messages-dir	= /usr/share/mysql
skip-external-locking

key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 64
myisam-recover         = BACKUP
#max_connections        = 300
query_cache_limit	= 1M
expire_logs_days	= 10
max_binlog_size         = 100M

#important optimize
table_cache             = 800
query_cache_size       = 512M
join_buffer_size       = 1G
memlock

#innidb configure
innodb_buffer_pool_size = 16G
innodb_log_buffer_size=4M
#innodb_flush_logs_at_trx_commit=2
innodb_thread_concurrency=50
innodb_flush_method=O_DIRECT
innodb_file_per_table
innodb_additional_mem_pool_size = 32M

max_heap_table_size = 256M
tmp_table_size = 256M
low_priority_updates = 1
key_buffer_size = 256M
max_length_for_sort_data = 1048576
sort_buffer_size = 268434432
read_rnd_buffer_size = 268434432

server-id=XXXXXXX
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=XXXXXX
binlog_do_db=XXXXX
log_slave_updates=1
auto_increment_offset=2
auto_increment_increment=2

bind-address            = XXX.XXX.XXX.XXX

log-slow-queries=/var/log/mysql/slow.log
relay-log = /var/log/mysql/slave-relay-bin
relay-log-index = /var/log/mysql/slave-relay-bin.index
slave-skip-errors = all

[mysqldump]
quick
quote-names
max_allowed_packet	= 16M

[mysql]
[isamchk]
key_buffer		= 16M

!includedir /etc/mysql/conf.d/

character_set_server  = utf8
collation_server      = utf8_general_ci

Как можно решить проблему? (базы на innodb, mysql 5.5)

whitemaster
()

MySQL репликация Master-Master не изменяется log-position

Форум — Admin

Добрый день! Настроил я репликацию Master-Master, в статусах на обоих серверах показывает, что всё отлично:

mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: ****
                  Master_User: ****
                  Master_Port: ****
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 410
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 3019403
1 row in set (0.00 sec)

Однако фактически репликация не происходит, и log-position не меняется:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000100 |      107 | ****,****    |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

логи с одного сервера, но на втором почти тоже самое, только номером лог файла отличаются. В чём проблема, как лечить?

 ,

whitemaster
()

Зеркалирование сервера, как перераспределять трафик между зеркалами?

Форум — Admin

Имеется два сервера основной и резервный, они синхронизируются друг с другом посредством rsync. Задача в случае выхода из строя основного сервера перенаправить трафик на резервный, необходимо, чтобы это происходило в кратчайшие сроки и в автоматическом режиме. Собственно как решить поставленную задачу? Лично мне на ум приходит создание над серверами проксирующего фронтенда на nginx, однако это вводит в систему третье звено, и при его отказе система всё-равно выйдет из строя. Так же была идеи использовать что-то вроде DDNS, но вот что, и как именно?!

 , , ,

whitemaster
()

RSS подписка на новые темы