Особенности настройки кеширования на production сервере

Решил я на днях заняться кешированием блога и напоролся на небольшую проблему…

Требовалось обработать JavaScript и CSS файлы (которых меня много, да и весят они немало) и получить на выходе всего лишь два файла. Для этого я использовал способ предоставляемый хелперными методами javascript_include_tag и stylesheet_link_tag, а именно: собрал все .js и .css файлы в два хелперных метода и установил у них опции :cache. Получился примерно следующий код:

<%= javascript_include_tag 'shCore.js', 'shBrushCSharp.js', 'shBrushXml.js', 'shBrushRuby.js', 'shBrushBash.js', 'shBrushPlain.js', :cache => 'sh' %>
<%= stylesheet_link_tag 'application', 'pagination', 'textilize', 'awesomebox', 'SyntaxHighlighter.css', cache => 'general_all' %>

Для того чтобы кеширование заработало в конфиге для production сервера (_config/environments/production.rb_) поле config.action_controller.perform_caching должно быть выставлено в true (на самом деле это значение по умолчанию для этого конфига)

Грабли же заключаются в том, что в этом случае в каталогах public/javascripts и public/stylesheets при первом обращении к серверу создаются файлы объединяющие все указанные вами скрипты и CSS и если у mongrel нет прав на запись в эти каталоги, по возникает исключение:


ActionView::TemplateError (Permission denied - /u/apps/blog4m/releases/20080928165941/public/javascripts/sh.js) on line #10 of layouts/main.html.erb:

10:     <%= javascript_include_tag 'shCore.js', 'shBrushCSharp.js', 'shBrushXml.js', 'shBrushRuby.js', 'shBrushBash.js', 'shBrushPlain.js', :cache => 'sh' %>
11:     <%= stylesheet_link_tag 'application', 'pagination', 'textilize', 'SyntaxHighlighter.css', :cache => 'main_all' %>

А прав у mongrel-а небыло потому что он запускался под специально созданной учётной записью (не под той под которой деплоились на сервер файлы)

Покапавшись в интернете я нашел следующий workaround: надо в deploy.rb добавить следующие задачи которые будут выполняться после создания Сapistrano проекта на сервере и после заливки новой версии на сервер:

task :after_cold, :roles => [:app, :web, :db] do
  sudo "chown -R mongrel:mongrel #{current_path}/"
end

task :after_update, :roles => [:app, :web, :db] do
  sudo "chown -R mongrel:mongrel #{current_path}/"
end

Задачи просто меняют владельца у находящихся на сервере файлов после выполнения задачь deploy:cold и deploy:update

* * *

Стратегии деплоймента в Capistrano

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

На данный момент доступна версия Capistrano 2.5.0 и которой мы и поговорим.

А начну я со стратегий деплоймента.

* * *

Загрузка файлов на сервер при помощи Capistrano

Налаживая работу сайта - узнаю много нового. Например при помощи Capistrano можно залить файл на сервер с локальной машины минуя SVN

* * *

Привратности жизни

Жизнь странная штука.

Полез тут вконтакт, чтобы посмотреть что там я о себе понаписал :) для того чтобы “честно” скопировать на страницу about и… наткнулся на приглашение об авторизации парня с которым мы вместе учились в школе, но с которым уже более 7 лет не общаюсь. И не было бы в этом ничего не обычного если бы не одно но… Этот парень и я постоянно в школе учавствовали в разных олимпиадах по техническим дисциплинам, в школьной жизни тоже были “прошарены” больше остальных по этим дисциплинам, причём в большинстве случаев он опережал меня на “пол корпуса”, а я старался не отставать.

Вроде как по логике вещей после школы нам прямая дорога в технари т.е. я им и стал… а вот он оказывается пошел в другую степь и закончил экономический факультет… А забавно вот что… если у меня в списке компании находятся девелоперские компании (т.е. на кого учился тем и работаю), то у него стоят должности “Начальник смены” и “Рабочий склада”. Я конечно против этого ничего не имею… Но как-то не вписываются они в его способности.

В общем не так всё и плохо получается у меня в жизни сложилось…

* * *

Блог готовится к запуску

Скоро состоится запуск моего блога :)

* * *