+29.60
Рейтинг
72.60
Сила

Alexandr Kachanov

FastCGI + nginx

Всем привет!

Недавно столкнулся с задачей отказаться от apache на сервере по причине нехватки оперативной памяти. Было решено использовать связку nginx + fcgi. Проблема, с которой я столкнулся при настройке сервера nginx для livestreet — отсутствие у движка единой точки входа. После курения мануала у меня получился вот такой конфиг:

<server {
    set             $path_to_project /var/www/girlstogether.ru;
    server_name     yourservername.ru;
    listen          80;

    access_log      /$path_to_project/logs/access.log;
    root            $path_to_project/htdocs;
    autoindex       off;

    location ~ \.php$ {
        try_files $uri  = 404
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $path_to_project/htdocs$fastcgi_script_name;
    }

    location @main {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME  $path_to_project/htdocs/index.php;
    }

    location / {
        try_files $uri
                  @main;
        allow all;
    }
}


Видно что тут есть проблемы с дублированием и, возможно, с безопасностью.
Кто нибудь сталкивался с подобной задачей? Как решали?

upd: try_files $uri = 404 (из первого комментария)

Кеширование или как много хорошего в этом слове


Думаю не для многих разработчиков есть секретом что в ЛС встроен механизм кеширования информации, полученной от БД. Но мои частые наблюдения сообщают о другом — я не могу вспомнить сторонние плагины, которые использовали бы кеширование в своей работе. Да что лукавить — я сам его обходил стороной часто. Поэтому этот топик призван пролить луч света на использование кеширования в ЛС в своих плагинах, т.к. это довольно просто.

Читать дальше →

ORM и ActiveRecord в 0.5 и выше

Выход версии 0.5 для меня было нечто большим, чем добавление страницы активности и ленты топиков из подписанных блогов. В новой версии реализованы ORM и ActiveRecord. Вместе они дают мощнейший инструментарий для разработчика, избавляя того от кучи однотипного кода, который приходилось писать каждый раз при разработке плагина. Тот-же форум, о котором будет идти речь в статье, после обновления похудел на 2177 строк кода. В этой статье я хочу углубиться в ORM и AR на примере создания плагина для LiveStreet.

Читаем дальше...

Система блоков

Если пробежаться глазами по сайтам, созданным с ее помощью несложно заметить, что большинство из них наследует две колонки стандартных шаблонов.
Но ведь LS может похвастаться простой, но от этого не менее функциональной системой блоков. Почему владельцы сайтов не используют ее? Возможно, дело в документации?
Это я сегодня с Вашей помощью и попробую исправить.


Читать дальше →

Добавляем тэг irony на 0.4.2

Давно хотел сделать этот тэг на своем небольшом сайте, и вот,
при поддержке богов Хаоса и Раздора и под чутким руководством OnTheFly это получилось.



Первая пошаговая инструкция для дураков ls версии 0.4.2 и шаблона New, в которой написано, как мы создадим кнопку добавления тега, добавим ее в редактор, разрешим тэг, и добавим селектор в css и будем писать красненьким ;)
Читать дальше →

История про нагрузку и как я с ней боролся.

Случилось так, что на одном из проектов full time стал переваливать за 1,5 сек и при этом сжирался весь проц. При этом все остальные показали были в норме: база — 0,002 сек, кеш — 0,01 сек.

Пришлось прикручивать профайлер и смотреть, в чем дело.

Виноват оказался Smarty, который из 1,5 секунд работал 1,2 (шаблон, на проекте, используется стандартный с легкими изменениями).

Копаясь дальше нашел самый сложный шаблон comments_tree.tpl, который выполняет в цикле инклюд шаблона comment.tpl.

Проблема решилась отказом от инклюда и переносом содержимого из comment.tpl в comments_tree.tpl.

full time на топиках с 400+ комментариев не превышает 0,4 сек.

Надеюсь кому-то поможет.

nginx, ошибка 404 и магические числа

В общем у меня при ошибке 404 перед страницей выводилось шестнадцатеричное число и после страницы — 0. Так, как магическое число все выводилось до заголовка, то весь дизайн ехал выглядел… отвратительно, не говоря уже об общей «неправильности».

Так вот, поиск показал, что это частая проблема связки nginx, ошибки 404 и размера тела ответа. Возникает эта проблема от того, что LiveStreet предполагает использование протокола HTTP/1.1, хотя это может быть не так.
Фиксить легко, надо всего лишь указать в ответе правильный протокол через $_SERVER['SERVER_PROTOCOL'], а не просто HTTP/1.1

Т.е. для livestreet'а надо править файл /classes/actions/ActionError.class.php и менять там
"HTTP/1.1 404 Not Found"
на
"{$_SERVER['SERVER_PROTOCOL']} 404 Not Found"


Никаких негативных последствий это нести не должно, т.ч. возможно этот фикс засунуть непосредственно в livestreet?

Новые возможности по переопределению/наследованию классов LiveStreet

В LS появилась новая возможность для разработчиков плагинов — наследование классов. Идея была высказана еще avadim'ом здесь.
Эта возможность позволит удобно переопределять различные методы одного класса (модуля, экшена, сущности, маппера) разными плагинами без конфликтов.
Главное отличие от делегирование — не происходит блокировки переопределения класса для других плагинов. Также есть возможность переопределения одного метода разными плагинами, но здесь разработчикам нужно быть очень осторожными и делать так, чтоб свести вероятность конфликта к минимуму.

Как использовать.
Например, нужно переопределить метод получения пути до аватара у сущности пользователя в плагине Test. В плагине необходимо объявить те классы, которые будут наследоваться. Объявление происходит в свойстве $aInherits:
<?php
class PluginTest extends Plugin {
    
    protected $aInherits=array(
       'entity'  =>array('ModuleUser_EntityUser'=>'_ModuleSide_EntityUser')
    );

    public function Activate() {        
        return true;
    }
    
    public function Init() {        
    }
}
?>

Читать дальше →