Is there a way to prevent rails to precompile asse

2020-04-21 06:12发布

问题:

I have a lot of assets in my project. The precompile task in the server is very slow and exhaust the host (CPU utilization 100%, high average latency).

My idea is to precompile all assets in my localhost and send to GIT (master) all files already precompiled.

In the deploy action (cap production deploy), avoid the precompile task and in the server, prevent any precompile task.

The server uses the already precompiled files sended via capistrano, available in GIT.

Is it possible? If yes, how to do? If no, there's another solution to avoid server precomile assets?

Below my configs:

Gemfile

gem 'capistrano-rails', group: :development
gem 'capistrano-faster-assets', '~> 1.0', group: :development

Capfile

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rails'
require 'capistrano/faster_assets'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

config/environments/production.rb

config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = true
config.assets.digest = true
other assets configs in this file is commented

Environment info

OS: Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-48-generic x86_64)
ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
rails -v: 4.2.3
nginx -v: nginx/1.8.0
passenger -v: 5.0.10

If you need more information, tell me on the comments.

回答1:

Short answer:

Replace

require 'capistrano/rails'

with

require 'capistrano/rails/migrations'
require 'capistrano/bundler'

Why this works:

When you require capistrano/rails, you are really including the following (source):

require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

Each of these can be included separately to get just those pieces of functionality. Per the docs: https://github.com/capistrano/rails#usage