【发布时间】:2023-03-22 12:09:01
【问题描述】:
...我认为这就是正在发生的事情。
我正在使用 Capistrano 将 Rails 应用程序部署到 EC2。部署总是成功,但即使我刚刚将 JS/CSS 更改推送到 Git,资产也不会第一次编译。当我保留 5 个版本时,我不得不重复部署,直到最终删除所有旧版本。我将它减少到 3,然后减少到 1。现在,在连续部署 2 次后,我看到了新版本的 JS 和 CSS。
在生产中,shared/public/assets 文件夹中还有多个 application.js 和 application.css 文件,包括最新的编译版本。除非我运行 rake assets:clobber,否则旧版本似乎不会被清理。 rake assets:clean 不会删除它们。我认为只要清单指向正确的文件,就可以拥有多个版本的资产。
我真的希望在有新更改时预编译资产。任何帮助将不胜感激。
宝石文件
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).
【问题讨论】:
-
这里有同样的问题。 99% 的时间 Capistrano 在我部署时不会重新编译资产(它忽略 CSS / JS 更改)。目前我发现的唯一补丁是在生产中调用
rake assets:clobber,然后再次部署。
标签: ruby-on-rails-4 capistrano3