Как я могу ускорить прекомпиляцию ресурсов Rails 3? - PullRequest
25 голосов
/ 15 февраля 2012

У меня работает приложение Rails 3.2.1, которое я развертываю через Capistrano с deploy/assets, который запускает задачу deploy:assets:precompile.

Все работает просто отлично, за исключением того, что сама компиляция очень медленная. У меня не так много CSS и JavaScript (всего около 8200 строк).

Обычно на компиляцию ресурсов требуется около 1-3 минут, что составляет около 90% от всего времени развертывания.

Есть ли способ оптимизировать это? Может быть, использовать другую процедуру для компиляции ресурсов или как-то оптимизировать его?

Я запускаю приложение на Linode 512 на 1.9.2-p290, Rails 3.2.1 и использую гем therubyracer, если это имеет какое-либо отношение.

Ответы [ 2 ]

21 голосов
/ 15 февраля 2012

Это не является ответом на то, чтобы заставить его работать быстрее, но, поскольку идет «другая процедура», вы можете сказать Capistrano прекомпилировать ресурсы только тогда, когда вы действительно внесли какие-либо изменения в свои активы. Вы хотели бы выполнить пользовательскую задачу assets:precompile примерно так, чтобы просмотреть журналы git между существующим и вновь развернутым кодом. Для меня это работало отлично, и теперь мне нужно иметь дело только с медленным развертыванием при обновлении ресурсов:

namespace :deploy do
  namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
      else
        logger.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
end

Источник: http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

16 голосов
/ 03 октября 2012

Я только что написал гем для решения этой проблемы в Rails, он называется turbo-sprockets-rails3 . Он ускоряет вашу assets:precompile, перекомпилируя только измененные файлы и компилируя только один раз, чтобы сгенерировать все ресурсы. Он работает "из коробки" для Capistrano, так как ваш каталог ресурсов распределяется между выпусками.

Было бы замечательно, если бы вы могли помочь мне проверить камень turbo-sprockets-rails3 и сообщить, если у вас есть какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...