Как использовать команду screen в Linux

Рассмотрим два типовых сценария.

1. На удаленном *nix сервере необходимо выполнить длительную операцию (резервное копирование, восстановление базы из дампа и т.д.). Для подключения к серверу используется PuTTY или другой SSH-клиент. Канал связи у нас не стабильный и, иногда связь прерывается. При этом, естественно, прерываются все задачи, которые связаны с текущим подключением.

2. Требуется подключение к одному процессу, но из разных мест и в разное время.

Выводим данные в html сразу после сабмита формы

Есть простая задача: поиск по логам. Форма - одно текстовое поле и кнопка submit. Задача: показать результаты поиска в отформатированном виде сразу после сабмита формы. Форму поиска при этом не скрывать, так удобнее.

Делать многошаговую форму - избыточно, делаем проще. В submit-обработчике пишем единственную строчку: $form_state['rebuild'] = TRUE;

Это заставит форму заново перестроиться после сабмита. Поиск по логам делаем частью функции формы.

Узкие места MongoDB: о чем нужно знать до начала работы над большим проектом

Оказалось, что MongoDB - это не лучшее решение, если у нас слишком много запросов на запись.

В случае нашего проекта, оказалось что предел - это примерно 9 000 записей в одну коллекцию в минуту. Если вдруг, по разным причинам возникает пик (не 9 000 запросов на запись в минуту, а, к примеру, 15 000), то коллекция блокируется на долгое время.

В MongoDB приоритет у запросов на запись выше, чем у запросов на чтенеие.

Шардинг в этом случае не спасет: балансировка данных между шардами - это тоже очень ресурсоемкая задача.

Добавляем свой autocomplete к мультиполю

Когда не хватает возможностей готовых модулей, можно сделать свою реализацию autocompete-поля.

Для обычных текстовых мульти-полей сделать это можно так:

/**
* implimentation of hook_form_FORM_ID_alter()
*/
function MYMODULE_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
  foreach($form['field_deleted_doc']['und'] as $delta => $field) {
    if(is_array($field) && is_numeric($delta)) {
      $form['field_deleted_doc']['und'][$delta]['value']['#autocomplete_path'] = 'autocomplete/doc_titles';
    }
  }
}

Как сбросить счетчик node ID в Drupal

Иногда хочется, чтобы нумерация нод снова начиналась с 1. Когда это может случиться:

  • При клонировании сайта с незначительными изменениями.
  • После тестирования нового сайта с тестовым контентом.

Что делаем?

1. Удаляем ВСЕ ноды скриптом или через админку.

2. Для MySQL выполняем следующие команды:

ALTER TABLE  `node` AUTO_INCREMENT=1
ALTER TABLE  `node_revision` AUTO_INCREMENT=1

Программная авторизация пользователя

Рецепт пригодиться, если нужно программно авторизоваться под аккаунтом какого-либо пользователя. Пароль при этом не сбрасывается.

Итак, создаем обычный php-файл и помещаем туда код, который находится ниже.

Этот php-файл помещаем в корень сайта по FTP или любым другим способом, а потом вызываем через браузер.

MongoDB: аналог count(distinct(key))

В реляционных БД все знают как просто получить количество уникальных строк в столбце таблицы:

Например, подсчитать количество уникальных URL в нашем логе можно так:

SELECT COUNT(DISTINCT(PageURL)) FROM LogTable;

MongoDB, как известно, часто используется для ведения логов.

По отдельности Mongo предоставляет оба метода

> db.logCollection.count();
> db.logCollection.distinct("pageURL");

Объединить эти два запроса в один поможет магия JavaScript:

> db.logCollection.distinct("pageUrl").length

Блокировки при выполнении длительных операций

На крупных проектах часто возникают задачи по массовому автоматическому обновлению нод или импорту новых нод или товаров.

Если система мнопользовательская, то во избежание перегрузок, стоит задуматься об очереди задач и блокировках. Мы ведь не хотим, чтобы рядовая задача положила сервер...

Мы не можем заранее знать сколько времени займет выполнение очередной задачи в очереди. Сколько сущностей предстоит обновить за раз: 5 единиц или 5 000 000.

Form API: где и как использовать $form_state

Роль $form_state
Как формируется и где используется.
Несколько полезных сниппетов