问题
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
来源:https://stackoverflow.com/questions/44998095/is-there-a-way-to-prevent-rails-to-precompile-assets-on-production