仅在使用 Capistrano 部署时清除旧版本后才编译资产
Assets only compiled after old releases purged when deploying with Capistrano
...我认为这就是正在发生的事情。
我正在使用 Capistrano 将 Rails 应用程序部署到 EC2。部署总是成功,但即使我刚刚将 JS/CSS 更改推送到 Git,资产也不会在第一次编译。当我保留 5 个版本时,我不得不重复部署,直到所有旧版本最终被删除。我把它减少到 3,然后又减少到 1。现在,我看到了一个新版本的 JS,并且在连续部署 2 次后 CSS。
在生产中,shared/public/assets
文件夹中还有多个 application.js
和 application.css
文件,包括最新的编译版本。除非我 运行 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).
确保您是 运行 最新链轮和链轮-rails。如果 linked_dirs
中有 tmp/cache
,请将其删除。
如果这解决了问题并且您想要恢复共享缓存,您可以尝试编写一个 Capistrano 任务,在部署开始时删除 tmp/cache/assets
的内容。
...我认为这就是正在发生的事情。
我正在使用 Capistrano 将 Rails 应用程序部署到 EC2。部署总是成功,但即使我刚刚将 JS/CSS 更改推送到 Git,资产也不会在第一次编译。当我保留 5 个版本时,我不得不重复部署,直到所有旧版本最终被删除。我把它减少到 3,然后又减少到 1。现在,我看到了一个新版本的 JS,并且在连续部署 2 次后 CSS。
在生产中,shared/public/assets
文件夹中还有多个 application.js
和 application.css
文件,包括最新的编译版本。除非我 运行 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).
确保您是 运行 最新链轮和链轮-rails。如果 linked_dirs
中有 tmp/cache
,请将其删除。
如果这解决了问题并且您想要恢复共享缓存,您可以尝试编写一个 Capistrano 任务,在部署开始时删除 tmp/cache/assets
的内容。