Прекомпиляция HTML шаблонов в Ruby on Rails

Assets Pipeline - это своего рода фреймворк внутри Ruby on Rails, одной из задач которого является конкатенация и минификация (компрессия) CSS и JavaScript ресурсов перед запуском приложения, скажем на продакшн сервере. Все это замечательно работает "из коробки" и не требует дополнительных настроек со стороны разработчика. Однако в данном посте я расскажу как расширить стандартный процесс компиляции ресурсов из Assets Pipeline для обработки других типов файлов на примере HTML.


Удаление вредоносного кода с сайта

На данный пост меня сподвигли вопросы нескольких владельцев сайтов о том, как удалить вредоносный код со своего ресурса. Ниже я попытаюсь описать последовательность из простых шагов, которая не требует каких-то специальных знаний и в первую очередь будет полезна новичкам в администрирование интернет-ресурсов.


IE9 и проблема больших CSS файлов

Компоновка всех файлов стилей в один перед запуском веб-приложения на продакшн сервере - это безусловно действенный и необходимый способ уменьшения количества запросов к тому же серверу и оптимизации скорости фронтенда. Для меня этот процесс априори стал стандартом в веб-разработке и я понятия не имел о подводных камнях, которые разбросал для нас Internet Explorer 9. Поэтому спешу поделиться некоторыми особенностями, а точнее ограничениями в IE9 на подключаемые к HTML документу таблицы стилей.


Ruby on Rails. Минификация Javascript ответов

Небольшой сниппет, позволяющий ускорить работу фронтенда в Ruby on Rails приложении за счет минификации Javascript ответов.

require 'uglifier'   class ApplicationController after_filter :compress_js_response   private def compress_js_response if Rails.env.production? && self.status == 200 && response.content_type.include?('javascript') response.body = Uglifier.compile(response.body, { output: { comments: :none } }) end end end 

В примере используется uglifier, но вместо него может быть применен любой другой минификатор. JS ответы не минифицируются в режиме разработки для удобства чтения и дебаггинга. Сниппет особенно актуален когда размер Javascript ответов достаточно большой, например содержит куски HTML.


Ruby и проблемы с OpenSSL

Доводилось ли вам при работе с Ruby видеть подобные ошибки?

openssl::ssl::sslerror: ssl_connect returned=1 errno=0 state=sslv3 read server certificate b: certificate verify failed

could not load openssl. you must recompile ruby with openssl support or change the sources in your gemfile from 'https' to 'http'. instructions for compiling with openssl using rvm are available at rvm.io/packages/openssl.

Дело в том, что при обращении к ресурсам, требующим SSL /TLS  подключение, Ruby использует библиотеку OpenSSL. Описанные выше ошибки возникают когда библиотеке не удается проверить подлинность сертификата на сервере, к которому делается запрос. Такая ситуация может возникнуть скажем при обращении к HTTPS ресурсу. Для решения проблемы необходимо обновить OpenSSL сертификат на своем локальном компьютере.


Дизайн Javascript кода. Фасад

В одной из своих прошлых записей я рассказывал о паттерне «Модуль», а также о том почему его стоит использовать при написании Javascript кода. Данный пост посвящен другому структурному паттерну, который называется «Фасад». Он широко используется в библиотеках и фреймворках, написанных на Javascript, и обладает неоспоримыми достоинствами, о которых я и постараюсь рассказать ниже.


markerclusterer.js или группировка маркеров на Google картах

В данной записи я хочу рассказать о дополнении к Google Maps API, которое позволяет группировать близко расположенные друг к другу маркеры и тем самым повысить удобство использования Google карт. Давайте сразу визуализируем проблему и представим что перед вами стоить задача отобразить на карте все кафе города N. Их может быть 50, 300, 500. Понатыкав такое обилие маркеров на карту, она превратится из удобного навигационного компонента в нечто непонятное. Врядле пользователь сможет выбрать заинтересовавшее его местоположение, так как маркеры будут накладываться друг на друга, а при уменьшении зума вообще сольются в один. Было бы намного удобнее группировать близко расположенные объекты и отображать один маркер с информацией о их количестве в данной области. Причем такая группировка должна происходит автоматически при изменении зума.

Итак, ожидаемый результат можно посмотреть в этом демо.


Закрываем 2013-ый

Провожая уходящий год, хочется поделиться ощущениями, накопленными в 2013-ом и попытаться определить куда и зачем движется отрасль веб-разработки.

Тенденции

Любое веб-приложение можно разделить на серверную и клиентскую части. Еще совсем недавно на серверную сторону ложилась большая часть операций, связанных с бизнес-логикой, обработкой и хранением данных, построением представлений и многое другое. Клиентская же сторона была довольно простой и выполняла в основном функции по отображению тех же представлений и отправкой данных из форм.