资产仅在使用Capistrano进行部署时清除旧版本后编译

时间:2015-09-18 08:59:50

标签: ruby-on-rails-4 capistrano3

......我认为无论如何都会发生什么。

我正在使用Capistrano将Rails应用程序部署到EC2。部署总是成功,但即使我刚刚将JS / CSS更改推送到Git,资产也不会第一次编译。当我保留5个版本时,我不得不重复部署,直到最终删除所有旧版本。我将它减少到3,然后减少到1.现在,我在连续2次部署后看到了新版本的JS和CSS。

在生产中,application.js文件夹中还有多个application.cssshared/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

Capfile

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 ec2-user@xx.xxx.xxx.xxx
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).

1 个答案:

答案 0 :(得分:1)

确保您正在运行最新的链轮和链轮导轨。如果tmp/cache中有linked_dirs,请将其删除。

如果修复它并且您想要恢复共享缓存,则可以尝试编写Capistrano任务,该任务在部署开始时删除tmp/cache/assets的内容。