Главные изменения:
Собственно переписанные правила для unicorn’а:
Capfile:
1 2 3 4 | |
deploy.rb:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
Не буду утруждать тут дифирамбами о необходимости прямо сейчас бежать за макбуком в магазин, но поверьте система отлично подходит как для php-разработчика, как и для ruby-разработчика (коим я сейчас и являюсь). Это полноценная мощь юникс-консоли вкупе с красивым интерфейсом.
Итак, поехали.
Alfred (~880 рублей) — это мегамощная штука для продуктивной работы, у которой есть одна точка входа в виде строки ввода, из которой можно выполнять разнообразные действия или перенаправлять ввод в другие программы. Это своего рода spotlight на стероидах или консоль 2.0 =)
Тут можно запустить программу по названию, быстро посчитать, погуглить, задать свои поисковые системы.
Я прикрутил перенаправление поискового запроса в dash (это централизованная документация по различным технологиям, об этой программе будет ниже).

Очень удобно то, что можно назначить свои скрипты по опредённому слову. Например, проиграть http://nooooooooooooooo.com/ по приходу менеджеров в комнату


Тем, кто ещё не использовал эту программу, настоятельно рекомендую это сделать. Уже вышла вторая версия, но я пока использую первую.
Spectacle (бесплатная) — быстрые хоткеи для изменения размера и расположения окон. Очень не хватало со времён убунты.
Bartender (~500 рублей) — позволяет настроить отображение иконок в статус баре. Позволяет скрыть ненужные иконки, но получить доступ к ним по необходимости. Владельцы буков с 11 диагональю меня поймут.
Droplr (бесплатно) — быстрый шаринг скриншота экрана по хоткею ⌥⇧+4. Хотя, вроде бы, такое уже запилили в дробоксе.
Alinof Timer (бесплатно) — простой таймер
CheatSheet (бесплатно) – подсказывает горячии клавиши для программы при удержании
ClipMenu (бесплатно) — менеджер буфера обмена. Запоминает всё, что было занесено в буфер обмена и позволяет выбрать из списка по нажатию ⌘+V
Dash (бесплатна, но настойчиво предлагает купить ~650 рублей) – оффлайный аггрегатор документаций api по языкам и фреймворкам. Список довольно внушительный и обновляется довольно оперативно. Там документация по языкам, базам, js-фреймворкам и многому другому.
gfxCardStatus (бесплатно) — переключалка графических карт между дискретной и встроенной для экономии памяти.
iTerm (бесплатно) – лучший терминал для мака.
KeepassX (бесплатно) — продолжаю пользоватся этой программой, хотя есть более удобный 1password.
Adium (бесплатно) — мессенджер icq, jabber
Archiver (~650 рублей) – архиватор
Keka (бесплатно) – архиватор
Дробпокс, Яндекс.Диск, BitTorrentSync (все бесплатны) – облачная синхронизация данных
Doit.im (бесплатна с ограниченным функционалом, ~65 рублей в месяц) – менеджер задач по GTD
Hipchat (~65 рублей с пользователя в месяц) — прикольный чат для общения между разработчиками.
Path finder (~1300 рублей) – удобный файловый менеджер, умеет открыватся вместо finder
Sequel Pro (бесплатно) – незаменимый менеджер MySQL
RubyMine, PhpStorm (платно) — лучше IDE для кода нет
Sublime Text – ненагруженный редактор для всего
SourceTree (бесплатно) – отличный визуальный клиент для git
Transmit (~1100 рублей) — клиент для загрузки файлов через ftp, sftp, s3.
MPlayerX (бесплатно) – отличный проигрыватель видео-файлов
VLC (бесплатно) – всеядный проигрыватель видео-файлов
]]>Эта ошибка воспроизводилась на Mac OS X 10.8.4, thinking-sphinx 3.0.5, и sphinx 2.0.9.
Началось всё с этой ошибки:
1
| |
И стектрейсом
1 2 3 4 5 6 7 8 9 | |
В логах было только видно, что запрос исполняется.
1
| |
После копаний оказалось, что thinking-sphinx выполняет сразу два запроса: собственно запрос на получение данных из сфинкса и запрос «SHOW META».
Оказалось, что во время второго запроса, сфинкс по неизведанной причине разрывает соединение.
1
| |
Скачал beta-версию (2.1.1) sphinx’а, причём сайт при загрузке выдал мне сообщение: «Congratulations! It’s official, you’re a Sphinxter!!» =)
На этой версии ошибок не было. Скорее всего это из-за mac, думаю, что на линуксе было бы всё нормально. Но проверять этот вариант уже нет времени.
]]>Поэтому при обновлении MySQL будет выскакивать ошибка о несоответствии библиотек:
1
| |
Если ставить так, как написано в readme:
1
| |
То возникает ошибка:
1
| |
Нужно добавить больше тирешек и кавычек
1
| |
Чтобы bundler всегда использовал данный параметр, выполните команду:
1
| |
Если у вас возникли следующие ошибки, то установка простой коммандой rvm install ruby-2.0.0-p0 не получится:
1 2 | |
Или ошибка при запуске bundle install:
1
| |
Чтобы избавиться от этих ошибок, нужно поставить openssl и gcc:
1 2 | |
И переустановить с нужными флагами:
1
| |
Ruby 2.0.0 требуется bundler 1.3, который ещё не вышел. Его можно поставить:
1
| |
Надеюсь, каждый найдёт что-то интересное.
С недавних пор подсел на capistrano, оказывается есть хорошее его дополнение caphub от компании railsware, позволяющая структурировать задания для разных приложений.
Отличный цикл статей о том, как начать работать с chef от Алексея Васильего. Chef – это инструмент для автоматизации настроек парка серверов.
Как сделать асинхронный запрос
Использование phing для собирания проекта. Ребята, у кого есть возможность – используйте capistrano или rake.
Новый опкэшер в PHP 5.5.0. Обратите внимание на табличку сравнения: неплохой прирост.
Начался новый подкаст rwpod от того же Алексея Васильего и ко. Хороший подкаст, аккумулирующий новости не только из ruby-сообщества, но и веб-новостей. Пока нет харкорных тем, но я думаю, всё впереди.
Вышел RubyMine5. Прошу обратить внимание на видео о его возможностей.
У кого есть свои скрипты-помошники, предлагаю переехать на rake. Возникали проблемы с zsh, передачи параметра в задачу. Вцелом хороший инструмент не только для ruby разработчиков.
Должна быть интересная книга по устранению уязвимостей в rails-приложении. Обязательно посмотрите ролик.
Узнайте, сколько же времени загружаются ваши гемы.
CasperJs – тестирование js и не только. Использует PhantomJS.
Рисуем сложные графики. Демки.
Dash – Offline-документация для macos по многочисленным языкам и фреймворкам: php, yii, ruby, gems, ror, javascript, backbone, mongodb, postgresql, mysql и это далеко не весь перечень. Однозначно в повседневное использование!
Очень дешёвые SSL-сертификаты. Например, на 5 лет за $25.
Поддержка JSON-атрибутов в sphinx 2.1. Sphinx не отстаёт от postgresql.
Spark – интересная визуализация небольших данных. Скарливаем ему ряд значений: spark 0 30 55 80 33 150, и получаем ▁▂▃▅▂▇
Очень крутое обучение от codeschool. Схема такая: вам показывают мини-лекцию, потом вы должны выполнить задание, т.е. писать код прямо в браузуере и он проходит проверку. Также у ребят есть скринкасты. Обучение не скучное и довольно эффективное.
Нравиться ли вам такая рубрика? Продолжать?
]]>Решил проверить у себя. На файле, размером в 720 Мб grep стал быстрей в 36 раз! Неплохо.
1 2 3 4 5 6 7 8 | |
Почему он это сделал — это другой вопрос: просто не переключил ветку или намеряно. Или к джуниору подбежал директор или менеджер и сказал, что нужно быстро исправить. Тут нужно бить такого программиста по рукам, но лучше предупредить болезнь, чем лечить её =)
Ситуация вторая: есть тестировщики, которые пишут автоматические тесты, которые не отделимы от проекта, соответственно им нужно дать право только на конкретную папку, где находятся тесты, чтобы они случайно не сделали изменения в других файлах.
Поэтому нужно ограничивать push в репозиторий на основе этих правил: тестерам дать право изменять файлы только в рамках одной директории. А программистам не давать возможность пушить в мастер, только какой-то группе доверенных программистов, а по сути тим-лиду.
Мы используем gitolite и он позволяет это сделать на уровне конфигурации.
Есть следующие группы пользователей
Есть 5 репозиториев: site, mobile, api, common-modules, outsource-site
Только на site распространяются правила для тестировщиков.
На site, mobile, api, common-modules — наши основные диктаторские правила
На outsource-site — «мягкие» правила.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
Если вы используете не gitolite, а другой продукт: gitosis или github, то скорее всего сделать это можно на хуках.
]]>1 2 | |
В этом случае возникнет блокировка, и запросы на чтение будут очень долго выполняется. А система устроена таким образом, что постоянно вставлять и обновлять данные из этой коллекции.
Удаление с указанием лимита в монге не существует, поэтому приходиться писать свои велосипеды.
Скрипт выбирает от 10к до 20к записей и удаляет их по _id (по 3к за раз). Если выборка + удаление длилось больше 10 секунд, то удаляется только 1000 записей. Это сделано на всякий случай, когда идёт активная нагрузка на коллекцию (в моём случае активная вставка по 10к элементов).
Все приведённые значения подобраны импирическим путём под конкретную задачу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | |
Вызывать так:
1
| |
Это консольный инструмент, пока не имеющий графического интерфейса, но дающий довольно полную картину в этой самой консоли.
Вот сам интерфейс:

Сам проект и документация находится на github’е: https://github.com/yandex-load/yandex-tank
В кратце обрисую возможности:
Можно нагружать одну страницу или сразу список урлов (которые будут запрашиваться примерно в одинаковых соотношениях).
А можно самому составить список запросов со своими заголовками. Например, можно реализовать нагрузку от запросов от анонимных пользователей и залогиненных. Через скрипт (php, python, bash, etc) залогиниться на сайте и получить нужные куки. Сгенерировать в нужном формате данные для танка и запустить тест.
Танк позволяет создать 3 вида нагрузки:
Причём эти виды нагрузки можно комбинировать в одном тесте.
Особенно хочеться отметить простоту и понятность синтаксиса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Вот что случается, когда сервер не справляется:

Думаю, что проект со временем будет обрастаться графическими интерфейсами, разработанными самим яндексом или сообществом.
Я даже уже придумал, что можно сделать. Получать статистику на нагружаемом сервере через vmstat и выводить красивые графики для быстрого нахождения наиболее узкого места: память, cpu, io.
]]>Иногда требуется зашировать данные с возможностью последующей обратной дешифровкой.
В yii есть отличная обёртка для такого рода операций: CSecurityManager::encrypt() и CSecurityManager::decrypt()
Настраиваем алгоритм, режим и ключ шифрования.
1 2 3 4 5 | |
1 2 | |
Примечания:
В Yii существует 3 уровня конфигураций: веб-приложение, консольное приложение, тесты. Требуется прописывать в этих 3 файлах часть одинаковых конфигураций: пути для импорта, конфигурация базы, правила роутов. Так же нужно убрать настройки из системы контроля версии файлы, которые могут быть разные на разных серверах или компьютерах разработчиков: подключение к базе, разных уровень логирования, кэширование. Нужно оставить только “болванку” конфигураций, которые корректируются в связи с необходимостью.
Схемотично такую систему можно изобразить так:

Все файлы, имеющие custom в имени, убираются из системы контроля версии (в моём случае добавляются в .gitignore). Вместо них создаются файлы-примеры для настройки: example.main.custom.php, example.console.custom.php, example.test.custom.php.
Для веб-приложения используются 2 файла: main.php и main.custom.php.
В main.custom.php пишутся индивидуальные настройки: подключение к mysql, сервер кэширования. У разработчика включаются gii, yii-debug-toolbar, добавляются вспомогательные режимы логирования, профилирования.
В main.php пишутся все настройки, которые не будут менятся для конкретного сервера: пути импорта, правила роутинга и т.п. И эти настройки сливаются с настройками с main.custom.php через функцию CMap::mergeArray(). Приоритет имеют настройки из main.custom.php
Примеры файлов main.php, main.custom.php
Конфигурация консольного приложения работает схоже: сначала сливаются изменения из main.php ( включая main.custom.php) c console.php, а затем накладываются из console.custom.php. Настройки тестов работают аналогично.
Естественно, у этой схемы есть свои минусы:
В консольном приложении не может быть некоторых параметров, а некоторые нужно удалить. Например, нужно удалить параметр defaultController:
1
| |
Или отключить Yii debug toolbar:
1 2 3 4 5 | |
Есть 2 способа работы со sphinx из php: через api (используя библиотеку) и воспользоваться SphinxQL: получение данных через протокол mysql и используя запросы, очень схожие с синтаксисом MySQL-запросов.
Для меня более предпочтителен второй вариант, не нужно таскать с собой библиотеку и все новые фишки будут реализованы в первую очередь в SphinxQL.
Включаем в параметрах sphinx прослушивание через протокол mysql
1 2 3 | |
Включаем в настройках yii компонент sphinx
1 2 3 4 | |
Теперь мы можем делать запросы:
1 2 3 4 5 6 7 8 9 10 11 | |
Есть замечательный инструмент для рисования графиков на js — highcharts, но он использует фреймворк jQuery и сам jQuery не подключает. Соответственно, мы создаём наш пакет, где указываем js и css файлы из highcharts и прописываем зависимость от jQuery.
1 2 3 4 5 6 7 8 9 10 | |
Теперь вместо
1 2 3 4 | |
Пишем
1 2 | |
Эта константа позволяет включать режим дебага и она же доставляет немного неудобства. Локально нужно устанавливать констатну YII_DEBUG в true, но не комитить это изменение нельзя. Т.е. перед комитом нужно выставлять значение в false. Мы же программисты, народ ленивый, поэтому тем меньше пальцедвижений, тем лучше.
Но эти варианты не подходят, когда используется консоль, нельзя будет использовать команду git add .
Решение очевидное: использовать директивы auto_prepend_file При запуске любого php-файла, будет предварительно выполнятся наш файлик с установленной константой.
Теперь пишем в файл с настройками сайта php-fpm /etc/php5/fpm/pool.d/super-site-on-yii.conf
1 2 | |
Создаём файл /var/www/yii_debug.php
1 2 3 4 | |
При подключении стороннего компонента или расширении стандартного хотелось бы «научить» IDE подсказывать
1 2 3 4 5 6 7 8 | |
Создаём файлик в любом месте, из которого он не сможет подключится автолоадерем. Например, в protected/autocomplete.php
1 2 3 4 5 6 | |
Теперь по вводу Yii::app()–>myext PhpStorm будет посказывать методы из класса MyExt.
Ещё можно заставить PhpStorm подсказывать в файлах представления (views)
Обычно хватает стандартного набора ($this и $form), но в каждой конкретной view может быть свой набор переменных
1 2 3 | |
Последний метод можно полу-автоматизировать через шаблоны gii. Это остаётся в качестве самостоятельной работы читателя.
]]>1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Нашёл наконец-то способ, как съэмулировать хоткеи в сочении с Alt. Например, чтобы сделать действие по Alt+c нужно последовательно нажать Esc и c. «А ларчик просто открывался» ©.
Тех, кто не знаком с хоткеями в mc, предлагаю ознакомиться с листингом горячих сочетаний mc.
]]>Использовать буду систему под названием bacula. Соответственно всё проверялось и работает под ОС GNU/Debian 6.
В интернете видел много довольно полных мануалов, где описывается конфигурация. Я описывать почти ничего не буду, просто приведу рабочие конфиги и скажу что копировать, чтобы начать бэкапить с ещё одного сервера. Можно считать статью предназначенной для тех, кто не осилил man, ну или хочет съэкономить своё время и получить работающую систему резервирования “побыстрее”.
Имеется 2 машины
Для mysql будем использовать собственный скрипт, который запускает xtrabackup.
Устанавливаем на обоих серверах sudo (чтобы запускать бэкапилку базы от рута через sudo) и file director
1
| |
А на сервере, который будет хранить все бэкапы (home.zagirov.name – 1.1.1.1) установим ещё bacula director и storage director:
1
| |
Выполняем на обоих серверах:
1
| |
Выполняем на home.zagirov.name (1.1.1.1)
1 2 3 4 5 6 | |
Добавляем правило для пользователя bacula запускать xtrabackup под sudo без запрашивания пароля.
1
| |
Создаём файлы для создания бэкапов. Храниться они будут централизовано на сервере бэкапов, а запускаться на удалённых машинах будут через sudo bash -s
/etc/bacula/scripts/xtrabackup.sh
1 2 3 4 5 6 7 8 9 10 | |
/etc/bacula/scripts/xtrabackup_rm.sh
1 2 3 4 | |
home.zagirov.name: /etc/bacula/bacula-dir.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | |
home.zagirov.name: /etc/bacula/client_home.zagirov.name.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | |
home.zagirov.name: /etc/bacula/client_www.zagirov.name.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | |
home.zagirov.name: bacula-sd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
home.zagirov.name: /etc/bacula/bacula-fd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
home.zagirov.name: /etc/bacula/bconsole.conf
1 2 3 4 5 6 | |
А на удалённом настраиваем только fd
www.zagirov.name: /etc/bacula/bacula-fd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Внимание!
Не забываем поменять пароли на свои!
Запускаем в консоле bconsole
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Восстановление происходит тоже через команду bconsole. Например, мы захотели восстановить файлы веб-сайта с www.zagirov.name на home.zagirov.name:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
Для добавления нового сервера необходимо добавить в конфиг bacula director инклуд нового файла, который будет содержать следующие директивы:
Ссылки:
]]>В выступлении Игорь говорит не о мастабировании в привычном для всех понимании (высокая нагрузка), а в плане рекомендаций к написанию конфигурации для nginx, чтобы при росте конфигурации не было проблем с его редактированием.
1 2 3 | |
1 2 | |
1
| |
Расположение статических location не играет роли.
Location’ы, написанные с помощью регулярных выражений, выполянются в порядке написания.
По возможности используйте статические location’ы. Например, вместо
1
| |
выносить все статические файлы в определённый каталог
1
| |
Заворачивание location на регулярном выражении в статический location
1 2 3 | |
1 2 3 4 5 6 | |
Понимание директив root и alias:
В общем смысле, root – добавляем в запрос путь в качестве префикса, а alias – заменяет location на указанный в директиве alias
1 2 3 | |
1 2 | |
1 2 3 | |
1 2 | |
1 2 3 | |
1 2 | |
1 2 3 | |
1 2 | |
1 2 3 | |
1 2 | |
Обратите внимание на конечных слэш в proxy_pass
1 2 3 | |
1 2 | |
1 2 3 | |
1 2 | |
Большинство директив носит декларативный характер, а это значит нет разницы, где их определять.
1 2 3 4 5 6 | |
Не рекомендуется использовать if. В примере сработает только последний if. Игорь рекомендует использовать if в связке с return.
1 2 3 4 5 6 7 8 9 10 | |
В этом примере break вообще не нужен, а expires можно вынести в location
1 2 3 4 5 6 7 | |
Break тут не нужен.
1 2 3 4 | |
Такое возникает у переходящих с apache. Тут нужно заменить всё на статические location.
1 2 3 4 5 | |
На просторах интернета была найдена статья, позволяющая реализовать автодополнение с помощью родной unix-утилиты bash_completion.
Если у вас проект находиться под управлением git, то просто добавляем сабмодуль:
1
| |
Или создайте файл LCompleteCommand.php в protected/extensions/complete/
Теперь подключаем класс в конфигурационном файле для консольного приложения (обычно это console.php):
1 2 3 4 5 6 | |
Пути до директории bash-completion могут различаться в зависимости от системы. Для Debian и Ubuntu можно оставить стандартный путь. В Mac OS X bash-completion был установлен с помощью homebrew, так что путь нужно сменить на /usr/local/etc/bash_completion.d/yii_applications
Теперь выполняем комманду для создания bash-completion файла от root:
1
| |
Теперь при создании новой сессии в bash будет работать автодополнение для yiic:
Есть несколько ньюансов. Бывают задачи очень объёмные и/или не очень срочные, которые я делаю в перерывах между задачами с более высокими приоритетами. Или спокойно делаю задачу, но прибегает менеджер с огромными глазами и криками, что сайт выдаёт ошибку, и нужно сделать быстрый hotfix.
В этом случае очень помогают changelist в PhpStorm.
Смысл changelist’а заключается в логическом разделении группы файлов для коммита. Т.е. файлы “прикрепляются” к определённому changelist’у. И при коммите мы выбираем нужный changelist и коммитим только файлы из этого changelist’а. Changelist есть всегда, по-умолчанию название default.
Настраиваем Redmine:
Нужно включить в параметрах redmine пункт Enable REST web service

Добавляем новый Task server в PhpStorm. Api token можно найти в личном разделе в redmine.

И добавляем парсинг номера задачи из описания коммита для отображения её как ссылки на задачу в redmine.
Project Settings → Version Control → Issue Navigation
Вводим паттерн регулярного выражения #(\d+) и генерируемую ссылку: **http://redmine.company.com/issues/$1**

Теперь открываем задачу Tools → Task → Open. Тут работает автодополнение для имени задачи.
Если были открытые файлы, то они все скроются. Сейчас мы работаем в своём наборе открытых файлов. Если откроем changelist под названием default, то все открытые файлы вернуться в редактор. Нужно понимать, что изменения в скрытых файлах остаются (это вам не git stash), а просто скрываются из вида.
Мы можем создать множество changelist’ов. Они не обязательно создаются из задачи, можно создать свой changelist. Я, например, создаю changelist NO для временных файлов, файлов своих настроек, декларативные скрипты для работы автодополнения, которые мне не нужно включать в коммит.
Теперь при коммите будут выбраны только файлы, которые находяться в выбранном changelist’е.
Откройте в разделе changes (alt+9 или ⌘+9) вкладку Local. Тут показаны изменённые файлы, сгруппированные по changelist’ам. Здесь файлы можно перемещать между changelist’ами.

Кликнув правой кнопкой по changelist, вы можете изменить его комментарий. Этот комментарий потом автоматически вставиться в описание коммита.
Для запуска сборки проекта в TeamCity из PhpStorm нужно поставить соответсвующий плагин.
Получилась вот такая схема работы. Ребята из JetBrains очень крутые: развивают продукт очень стремительно, вводять очень удобные фишки. Кто ещё не пробывал PhpStorm – обязательно попробуйте. А на него перешёл с Netbeans и нисколько не жалею.
]]>Первый параметр в конструкторе CActiveDataProvider может быть строковым значением с названием модели или экземпляр класса модели.
Поэтому можно использовать CActiveRecord::cache() для кэширования, но нужно установить значение 3 у третьего параметра, потому что мы должны закэшировать 2 запроса: получение количества записей и само получение записей.
Не забудьте использовать зависимости для принудительного протухания кэша.
1 2 3 4 5 6 7 8 9 10 11 | |