【问题标题】:Assets only compiled after old releases purged when deploying with Capistrano仅在使用 Capistrano 部署时清除旧版本后编译的资产
【发布时间】:2023-03-22 12:09:01
【问题描述】:

...我认为这就是正在发生的事情。

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

在生产中,shared/public/assets 文件夹中还有多个 application.jsapplication.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


【解决方案1】:

确保您运行的是最新的 sprockets 和 sprockets-rails。如果您在linked_dirs 中有tmp/cache,请将其删除。

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

【讨论】:

  • 我刚开始检查。删除tmp/cache 可行,但这是否意味着它在每次部署时都从头开始构建资产?我有另一个具有类似设置的项目,其中tmp/cachelinked_dirs 中似乎没有同样的问题。有什么想法吗?
  • 我自己最近一直在和这个搏斗。在逐步浏览 sprockets 代码库后,我注意到缓存没有正确过期。我能找到的唯一解决方法是每次都强制完全重建。
  • 感谢您的帮助!我希望有一个更好的解决方案,但这对我有用。如果我遇到任何事情会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多