Особенности настройки кеширования на 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 лет не общаюсь. И не было бы в этом ничего не обычного если бы не одно но… Этот парень и я постоянно в школе учавствовали в разных олимпиадах по техническим дисциплинам, в школьной жизни тоже были “прошарены” больше остальных по этим дисциплинам, причём в большинстве случаев он опережал меня на “пол корпуса”, а я старался не отставать.
Вроде как по логике вещей после школы нам прямая дорога в технари т.е. я им и стал… а вот он оказывается пошел в другую степь и закончил экономический факультет… А забавно вот что… если у меня в списке компании находятся девелоперские компании (т.е. на кого учился тем и работаю), то у него стоят должности “Начальник смены” и “Рабочий склада”. Я конечно против этого ничего не имею… Но как-то не вписываются они в его способности.
В общем не так всё и плохо получается у меня в жизни сложилось…

