Kohana 3.0. Мысли о том как надо писать модели.

Для работы со штатным ORM нужно заводить модель для каждой таблицы. Всегда. Она может быть вообще пустой, но она должна быть. Ну, необязательно совсем пустой, там могут быть описания связей и всё такое.

Читать далее

Sitemap в robots.txt

Наверное много у кого есть такое, когда один код тиражируется на множество сайтов. И соответственно robots.txt тоже. Это вещь из разряда «сделал и забыл».

Уверен, многие помнят, что в этом файле нужно указывать ссылку на sitemap. Так вот, ссылка должна быть абсолютной и включать в себя адрес сайта. Так написано в спецификациях robots.txt. Можете написать и относительный URL, но не факт что он будет работать. А оно вам надо?

Читать далее

Adsence + Rapida. Новые правила

Недавно Adsence поменял правила выплат через Рапиду, после чего мне пришлось проходить целый квест по заведения аккаунта, персонификации и созданию шаблона (да, я слоупок) . Зато теперь средства с Adsence должны капать мне прямо на банковский счёт. Теперь я буду платить с налоги!! Уииииии!!! =)

Вот! И пока не ничто забыто, хочу зафиксировать всю эту адову последовательность. Начинаем по-порядку.

Исходное состояние — предполагается, что у вас есть аккаунт Adsence, который надо привязать к рапиде.

Создание аккаунта в Рапиде
=========================================
Никаких сложностей не вызвало. Кроме самого факта создания ещё-одного-аккаунта. Кстати, логином, идентификатором и просто номером кошелька в рапиде является номер вашего мобильного телефона.

Персонификация аккаунта
=========================================
Со временем эта информация может устареть, поэтому не поленитесь посмотреть инструкцию

Вот тут целая история! Просто так сидя за компьютером аккаунт персонифицировать не получится. Придётся тащить своё бренное тело в офис Рапиды, если таковой есть в вашем городе. А если нет, то можно пойти на почту, но придётся ещё и потратить деньги.

Чтобы выполнить персонификацию через почтовый перевод, зайдите в свой личный кабинет Рапиды и найдите ссылку «Пополнить«. Затем надо найти вариант «Почтовым переводом«. После этого Вам будет предложено заполнить свои анкетные данные. В качестве суммы рекомендуют указывать сумму 50 рублей. Эти 50 рублей просто упадут в ваш кошелёк.

Если всё сделано правильно, вам будет предложено скачать и распечатать PDF-файл, который фактически является заполненным бланком почтового перевода, который принимают в почтовых отделениях. У меня, по крайней мере, приняли. Почта возьмёт с вас комиссию 40 рублей сверх самой суммы.

После того как всё сделано, сосканируйте или сфотографируйте чек и отправьте письмом на адрес client@rapida.ru. Кроме чека надо приложить сканы паспорта. Я приложил скан разворота с фотографией и с пропиской. Все эти сканы должны быть цветными, но не более 2Мб.

Всё. После этого остаётся подождать несколько рабочих дней.

Создание шаблона
=========================================
После того как вы удачно персонифицированы, вы можете создавать свой шаблон. Рапида поддерживает тьму шаблонов, но меня интересовал именно шаблон вывода денег на банковский счёт. В анкете надо просто подробно и аккуратно заполнить все реквизиты. В поле сумма пишите любую сумму в пределах возможного. На переводы это влиять не будет.

В поле «Назначение платежа» я написал «Вознаграждение Adsence«. Если вы зачисляете средства сразу на лицевой счёт физ.лица (что не совсем законно), то укажите там то, что вам скажет ваш банкир.

После того как шаблон создан и сохранён, поищите поле «Уникальный номер (Для пользователей Google AdSense)». Это то что вам нужно.

Ссылки, которые мне помогли
=========================================
Вообще говоря ссылок я нашёл не так и мало, но эти две показались мне наиболее полезными и ценными.

  • Классное видео Как стать персонифицированным пользователем в Rapida!
  • Подробный пост Изменения выплат Adsense: составляем правильный шаблон без комиссий

Как я боролся с тормозами на одном там сервере

У клиента начал дико тормозить сервер (сборка bitnami-lampstack). Работало-работало, и вдруг стало тормозить.

Пока искал в чём проблема, обнаружил, что за последние пару лет в линуксах появилось много нового и интересного! Я отключил пару вещей, после чего тормоза исчезли. Но «после» — это не всегда значит «в следствие». В общем пока наблюдаю за ситуацией. Что я отключил:

Apport
======================
Это вообще интересная софтина. Она мониторит процессы и собирает сообщения об ошибках. Что ними потом делать, я не понял. Видимо надо отправлять разработчикам, а может оно само шлёт это всё сразу на серверы Ubuntu.

В общем штука , которая вообще-то нужна разработчикам всего этого open-source, но точно никак не окончательным пользователям. Кстати по-умолчанию она должна быть выключена. Почему она оказалось включённой в этой сборке bitnami … фиг знает..

Как выключить Apport:

sudo nano /etc/default/apport

и установить поле enabled в 0. Ну или соответственно 1 если хотите его включить.

Прочитать подробнее, что это такое: https://wiki.ubuntu.com/Apport

mod_pagespeed
==========================
Сначала небольшая предыстория, как я это нашёл. Тут вообще хохма!

Сначала я обнаружил в логах апача, что кто-то усиленно качает статические файлы! Сайт тормозит, страницы открываются по 10 минут, а этот не останавливается прям! И что характерно качает только статику, картинки, стили, скрипты! И качает из локальной сетки (у AWS кроме публичного IP есть адрес локальный в сети 10.*.*.*)! И вдруг я понял что это собственно и есть адрес моего сервера…

User-agent у этих обращений такой «Serf/1.1.0 mod_pagespeed/1.7.30.4-«

После чтения мануалов стало понятно, что это модуль для апача. В целом хорошая вещь (наверное), которая занимается кешированием/архивированием статики и должно бы теоретически ускорить загрузку страницы у конечного пользователя. При наличии достаточных ресурсов на сервере. Но сервер тормозит дико, просто умирает, и я решил отключить эту опцию.

Отключается mod_pagespeed легко. Надо найти в конфиге нужную строчку:

……
# Turn on mod_pagespeed. To completely disable mod_pagespeed, you # can set this to «off». ModPagespeed off ……

Вместо заключения
======================
Сервер пока стоит. Будем смотреть дальше
А вообще я заметил за собой, что я практически всегда отключаю всякие ненужные на мой взгляд опции, а не подключаю новые. Эдакий мастер-ломастер.

NB: HTTP-редирект 301 в Kohana

Я не буду говорить, как делать перенаправлениe с кодом 301 при помощи .haccess. Не буду рассказывать, как сделать это с помощью простого PHP. Всё это вы легко и в изобилии найдёте на просторах интернета. А вот как сделать это средствами Kohana?

Удивительно, но для перенаправления с кодом 301 стоит использовать ту же команду, что и при простом перенаправлении. Нужно просто указать код.
Kohana 3.0.9

Request::instance()->redirect(«some/thing»,301);

Или соответственно в Kohana 3.1.1

Request::$initial->redirect(‘some/thing’,301);

Если код перенаправления не указан — будет дан код 302.

Диск переполнен. Как найти мусор?

Команда du позволяет вычислить использование диска каждой папкой

$ du —help Использование: du [КЛЮЧ]… [ФАЙЛ]… или: du [КЛЮЧ]… —files0-from=Ф Суммирует использование дискового пространства каждого ФАЙЛА, с каталогами. …

Если просто запустить её без параметров, то она начнёт рекурсивно выводить размеры всех папок начиная с текущей. Очень неудобно. Самым удобным мне показалось ограничить вывод на один уровень вложенности:

du -h —max-depth=1

SSH Socs-proxy для параноиков

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

Всё хорошо, если вы в своей домашней защищённой сети, но ести вы где-то в общественном месте подключились к какой-нибудь неизвестной WiFi точке, Все ваши пароли могут быть украдены.

Решение проблемы — работа через SSH Socks-proxy

Сначала запускаете такую команду:

ssh -D localhost:8080 ваше_имя@адрес_удаленного_компьютера

После этого в сетевых настройках браузера выберите использование Socks-proxy, укажите порт и работайте через защищённый канал!

Kohana. Ускоряем ORM

Штатный ORM у Kohana практически на каждое шевеление создаёт запрос «SHOW CREATE TABLE blablabla«.

Я как-то не придавал этому значения раньше, но похоже этот запрос довольно ёмкий по времени, у меня он почему-то занимает до пол-секунды в плохую погоду (погода зависит от текущей загрузки хостинга). А если страница пестрит обращениями к БД, которые делаются через ORM, то ждите того, что треть запросов будет именно «SHOW CREATE TABLE«.

Как бы сделать так, чтобы ORM так не делал? Ведь структура таблиц работающего сайта практически не меняется годами!

Решение простое! Нужно немного переопределить метод list_columns класса ORM так, чтобы он кешировал структуру таблицы и дважды не бегать.

Для этого нужно в папке application/classes создать файл orm.php с примерно сдедующим содержанием:

_table_name .»structure»; if ($result = Kohana::cache($cache_key, NULL, $cache_lifetime)) { $_columns_data = $result; }
if( !isset($_columns_data)) { $_columns_data = $this->_db->list_columns($this->_table_name); Kohana::cache($cache_key, $_columns_data, $cache_lifetime); }
return $_columns_data; } }

Кстати это не я такой умный. Идею решения я нагуглил, хотя и немного переделал.

UPD: Понятно это нужно делать в конце, когда разработка завершена и структура БД уже не будет меняться

Bitnami LAMP сборка и проблема доступа к phpmyadmin


Про что это вообще?
==========================
Когда поднимаешь виртуальный сервер EC2 на Amazon Web Services (далее AWS) можно выбрать систему. Можно например выбрать какой-нибудь популярный дистрибутив Linux.

Но вот незадача — система устанавливается голая. Без MySQL, Apache и всего такого за что мы любим серверы Linux. И начинаешь устанавливать пакеты, разрешать зависимости, бороться с недоступными репозиториями…

Вот почему я люблю готовые сборки. Amazon позволяет выбрать из огромного количества сборок! В частности мне нравится сборка Bitnami LAMP stack. Разворачиваешь и получаешь готовый сервер!

Ну и в чём проблема?
==========================
Команда Bitnami настолько сурова, что не позволяет работать с phpmyadmin с наружи. Только с локалхоста!

For security reasons, this URL is only accesible using localhost (127.0.0.1) as the hostname

На самом деле проблема безопасности phpmyadmin понятна, недавно прокатилась целая волна уязвимостей. Но как они предлагают это сделать? Для этого надо подключиться по SSH к своему хосту, и поднять SSH туннель. Под Windows сгодится и Putty (правда у меня не получилось, но люди как-то делают).

Но что делать, если нет времени на обучение клиентов пользованию туннелями?

Выключаем эту безопасность
==========================
Всё просто. Ищем в файле /home/bitnami/apps/phpmyadmin/conf/httpd-app.conf строки

= 2.3>
Require local

И меняем на следующее

= 2.3>
#Require local Require all granted

Будет не так безопасно, зато быстро, дешево и сердито.

Яндекс.Метрика