Ресурсы, скомпилированные только после удаления старых выпусков при развертывании с помощью Capistrano.

...Я думаю, что это то, что происходит в любом случае.

Я развертываю приложение Rails в EC2 с помощью Capistrano. Развертывание всегда проходит успешно, но даже если я только что отправил изменения JS/CSS в Git, активы не скомпилируются с первого раза. Когда я сохранял 5 релизов, мне приходилось повторять развертывание, пока все старые релизы в конечном итоге не были удалены. Я уменьшил его до 3, а затем до 1. Теперь я вижу новую версию JS и CSS после 2 последовательных развертываний.

В рабочей среде также есть несколько файлов application.js и application.css в папке shared/public/assets, включая последнюю скомпилированную версию. Старые версии, кажется, не очищаются, если я не запускаю rake assets:clobber. rake assets:clean не удаляет их. Я предполагаю, что можно иметь более одной версии актива, если манифест указывает на правильный файл.

Я бы очень хотел, чтобы активы прекомпилировались при появлении новых изменений. Любая помощь будет оценена по достоинству.

Gemfile

gem 'rails', '4.2.3'
gem 'mysql2'
gem 'haml-rails', '~> 0.9'
gem 'sass-rails', '~> 5.0'
gem 'autoprefixer-rails'
gem 'bootstrap-sass', '~> 3.3.5'
gem 'font-awesome-rails'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'underscore-rails'
gem 'ejs'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development do
  gem 'capistrano', '~> 3.4.0'
  gem 'capistrano-rails', '~> 1.1'
  gem 'capistrano-rbenv', '~> 2.0'
  gem 'capistrano-passenger'
end

group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 2.0'
  gem 'spring'
end

Cap-файл

require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/rbenv'
require 'capistrano/rails'
require 'capistrano/passenger'

deploy.rb

set :keep_releases, 1

namespace :deploy do
  after :restart, :cleanup, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      ...
    end
  end
end

Вывод Capistrano

INFO [b2b76675] Running RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile as [email protected]
DEBUG [b2b76675] Command: cd /var/www/my-app/releases/20150918071822 && ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 RAILS_ENV=production RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.2 ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile )
INFO [b2b76675] Finished in 2.014 seconds with exit status 0 (successful).

person Tracy Fu    schedule 18.09.2015    source источник
comment
Та же проблема здесь. В 99% случаев Capistrano не перекомпилирует активы при развертывании (игнорирует изменения CSS/JS). На данный момент единственный патч, который я нашел, это вызов rake assets:clobber в продакшене, а затем повторное развертывание.   -  person collimarco    schedule 18.12.2016


Ответы (1)


Убедитесь, что вы используете новейшие звездочки и звездочки-рельсы. Если у вас есть tmp/cache в linked_dirs, удалите его.

Если это исправляет проблему и вы хотите вернуть общий кеш, вы можете попробовать написать задачу Capistrano, которая удаляет содержимое tmp/cache/assets в начале развертывания.

person will_in_wi    schedule 18.09.2015
comment
Я только собрался проверить. Удаление tmp/cache работает, но не означает ли это, что ресурсы создаются с нуля при каждом развертывании? У меня есть другой проект с аналогичной настройкой, где tmp/cache находится в linked_dirs, который, похоже, не имеет такой же проблемы. Любые идеи? - person Tracy Fu; 19.09.2015
comment
Я сам недавно боролся с этим. Пройдясь по кодовой базе sprockets, я заметил, что кеш не устаревает должным образом. Единственное исправление, которое я смог найти, это принудительная полная перестройка каждый раз. - person will_in_wi; 19.09.2015
comment
Спасибо за вашу помощь! Хотелось бы лучшего решения, но это сработало для меня. Обновлю, если наткнусь на что-нибудь. - person Tracy Fu; 21.09.2015