Pull to refresh
34
0
Алексей @nitso

User

Send message
Атомарности переключения вообще очень сложно добиться. Есть два варианта:
1) Разорвать текущие соединения (restart), при этом будет атомарность, но клиенты получат ошибки
2) Нормально завершить текущие соединения (reload), в этом случае атомарности не будет — параллельно будут работать и старые, и новые, но клиенты ошибок не получат.
В зависимости от требований, выбирается подходящий вариант.

Что касается кофигурации, решение со ссылкой решает одну очень важную проблему — права доступа. Для изменения ссылки не требуется привелегий, достаточно прав на запись в папку с проектом. Для перезапуска же сервера требуется привелегированный доступ (читай: root), да и возможности ошибиться там намного больше. Возможность отката сохраняется.

У php-fpm есть проблемы с reload: bugs.php.net/bug.php?id=60961, поэтому в любом случае приходится искать решение уровнем выше.
Чтобы сохранить окружение целым и не давать рутовых прав CI, для нас оптимальным вариантом стало отключать ноду на балансировщике, ждать завершения процессов, обновляться, включать ноду обратно.
Все намного проще. Сценарий получения ошибки такой:

Веб-сервер смотрит в папку /var/www/htdocs
Структура папки www следующая:

$ ls -al /var/www
htdocs -> version-71928
version-59189
version-71928

Новая версия кода выкладыватется в отдельную папку, ссылка htdocs переключается на новую версию.

В коде в новой версии добавляется инклюд (новая библиотека, класс, служебный файл, любая сущность на диске). PHP разрешил путь до /var/www/htdocs в виде /var/www/version-71928 и закешировал. После переключения ссылки старый кэш будет актуален вплоть до 2 минут (по умолчанию, в зависимости от realpath_cache_ttl) и все новые файлы будут искаться в прошлой версии.

Итого: версию выложили, переключили ссылки, и около 2 минут сыпятся фаталы
Unknown: Failed opening required '/var/www/htdocs/include.php'
Хуже, если старая версия удалена — фаталы будут сыпаться гуще. А в случае, когда необходимо синхронное переключение, могут возникнуть неведомые ошибки, которые никогда больше не воспроизведутся и могут принести сильную попа головную боль.

Дергать миллион раз ничего не нужно, достаточно использовать Composer Autoload :)
Любая работа может быть интересной, это вопрос личного восприятия. Я сейчас с приятной ностальгией вспоминаю то, о чем говорит XanderBass.
А что касается VDS за 5 баксов — большинство по качеству (производительности) не далеко ушли от шареда, просто повышают ЧСВ за счет роста ответственности. И приходится так же заниматься оптимизацией, придумывать способы избавиться от лишнего балласта, писать свои узкоспециализированные решения вместо использования популярных библиотек-комбайнов.

Но вот за стандарты я готов горой стоять. И за тесты. Ничто не мешает применять современные техники даже в олдскульном стиле. Тем более, что трудозатраты на написание composer.json минимальные, а тесты еще тыщу раз сыграют на руку.
Да, вселенная оптимизации сайта под дешевые хостинги и бережливых клиентов существует где-то рядом. Быстро забывается и отсутствие ssh, и пляски с загрузками мегабайтных архивов с кодом через панель управления, поскольку ftp сутками прокачивает тонну мелких файлов.

Это очень, не побоюсь этого слова, нишевая разработка с другими подходами.
Все зависит от решаемых задач. Например, есть реализация mustache или Fenom, о котором писали на хабре.

Мое личное мнение: по-быстрому и по-простому отлично работают обычные php-шаблоны с минимальной обвязкой. В остальных случаях предпочитаю twig.
Когда-то давно-давно это было бомбой.
Чем ваше решение лучше, например, твига?
SplObjectStorage, вероятно, чтобы можно было удобно detatch'ить роуты. Но совершенно очевидно, что коллекция должна быть приватная.
Напрашивается ответная статья с исправлениями всех ошибок :)
Статья рассчитана на новичков, tutorial. Где же тесты?
Можно еще в composer.json добавить требования к php.
С первого взгляда изяществом не блещут :) Здоровая дура, да еще и с цепью. И, кстати, механизм должен обладать определенной жесткостью в обе стороны. У меня в квартире, например, сквозняком закрывает открытые фрамуги.

Напрашивается механизм, подобный серве с длинным эластичным элементом, который бы цеплял/толкал створку. Чтобы можно было руками окно открыть и не бояться, что серву сорвёт от порыва ветра/случайного дёрга за ручку. У нас на окнах даже фиксаторы-«гребенки» уже гнутые вхлам, потому что про них забываешь и пытаешься с силой окно закрыть (или открыть).
Хорошо, если это клон какой-нибудь «нормальной» модели. По моему опыту владения китайским багги (одна из первых HIMOTO), там больше проблем с шасси, чем удовольствия от первых поездок. Это касается и конструкции, и запчастей.
Очень хотелось увидеть какой-то изящный механизм открытия/закрытия окна. А тут даже «серво-сейвера» нет :(

Вообще, за последние лет пять, все статьи как одна: тут приколхозили, там закостыляли. С одной стороны повторить хочется, с другой рука не поднимается сопли по окнам развешивать. Да и что касается автоматизации, большинство начинаний заканчивается на миганием светодиодом люстрой в прихожей и открытием/закрытием жалюзи.

Кстати, у вас на соседнем окне не клапан ли вентиляционный? Он со своей задачей не справляется?

PHP вообще страшненький :(
Сколько у вас ушло ресурсов на написание и внедрение самописной системы? Любопытно сравнить со стоимостью проприетарного решения вроде splunk.
Статью-то прочитал. Вопрос скорее не по описанному решению, а по гугловской рекомендации избавиться от блокирующих стилей в шапке. В теории это поможет быстрее отрисовать страницу, но на практике может привести к нежелательным последствиям.
А насколько в реальной разработке удобнее подгружать CSS скриптами?
Ну то есть, следует ли брать и бежать все <link rel="stylesheet"> менять на инъекцию js'ом?

Не сильно ли изменится user-experience в этом случае? Например, заторможенная отрисовка стилей при неважном соединении. При классическом подключении стилей браузер ждет загрузки css и рендерит уже стилизованную страницу, а при асинхронном подключении css браузер сначала отрисует «голый скелет», догрузит стили, мигнет и только потом выплюнет стилизованную страницу.
А не пробовали отключать Inspections в данном файле (мужичок в правом нижнем углу)? Бывает, что файл насыщен трудноперевариваемыми конструкциями, и подвисает проверки синтаксиса и другие Inspections.
Для тех, кто все время забывает сочетания клавиш, есть встроенная распечатывабельная подсказка: Help->Default Keymap Reference
Можно еще третьей кнопкой мыши (нажатым колесом) тащить курсор. Вообще, все это легко настраивается. А найти нужное действие (и подсмотреть клавиатурное сокращение) можно по ctrl+shift+a (вроде бы во всех стандартных раскладках).
Проще всего дебажить консольные скрипты (на локальной машине с xdebug) можно так:
  • включаем пассивный debug-режим (Run — Start Listening For PHP Debug Connections или соответствующей кнопкой на панели)
  • Запускаем скрипт с аргументами: php -d xdebug.remote_enable=1 -d xdebug.remote_autostart=1 my_script.php

xdebug.remote_enable=1 можно спокойно положить в php.ini, а remote_autostart я бы не советовал — пыха будет всегда ломиться в порт, даже когда не надо.

Более «правильный» способ с указанием IDE Key приведен выше.

А чтобы отлаживать по одной кнопке, достаточно создать debug-конфигурацию и запускать её, например, во встроенном терминале. Вообще без смены контекста будет.
Поиск в окне работает не только для дерева файлов, но и вообще в практически всех панелях. Classmap, VCS, Code Coverage и т.д.
Отдельно хочется упомянуть поиск по действиям (ctrl + shift + a) — если забыл как сделать CamelCase для выделенного текста или любое другое действие.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity