From e64572b84cf87432324725adb4cadca61ba7e39f Mon Sep 17 00:00:00 2001 From: Martin Emde Date: Thu, 9 Oct 2014 16:16:17 -0700 Subject: [PATCH] Rough draft of sync_assets feature --- lib/engineyard-serverside/configuration.rb | 2 ++ lib/engineyard-serverside/deploy.rb | 2 +- lib/engineyard-serverside/rails_assets.rb | 14 +++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/engineyard-serverside/configuration.rb b/lib/engineyard-serverside/configuration.rb index ac0698b5..5db60f30 100644 --- a/lib/engineyard-serverside/configuration.rb +++ b/lib/engineyard-serverside/configuration.rb @@ -102,7 +102,9 @@ def fetch_deprecated(attr, replacement, default) def_option :services_check_command, "which /usr/local/ey_resin/ruby/bin/ey-services-setup >/dev/null 2>&1" def_option(:services_setup_command) { "/usr/local/ey_resin/ruby/bin/ey-services-setup #{app}" } + # experimental, need feedback from people using it, feature implementation subject to change or removal def_option :restart_groups, 1 + def_boolean_option :sync_assets, false DEFAULT_KEEP_RELEASES = 3 diff --git a/lib/engineyard-serverside/deploy.rb b/lib/engineyard-serverside/deploy.rb index 78b2e36f..a0ae75e9 100644 --- a/lib/engineyard-serverside/deploy.rb +++ b/lib/engineyard-serverside/deploy.rb @@ -34,7 +34,7 @@ def cached_deploy setup_services symlink_configs setup_sqlite3_if_necessary - run_with_callbacks(:compile_assets) # defined in RailsAssetSupport + run_with_callbacks(:compile_assets) enable_maintenance_page run_with_callbacks(:migrate) callback(:before_symlink) diff --git a/lib/engineyard-serverside/rails_assets.rb b/lib/engineyard-serverside/rails_assets.rb index 35344efb..f5f4eaca 100644 --- a/lib/engineyard-serverside/rails_assets.rb +++ b/lib/engineyard-serverside/rails_assets.rb @@ -54,7 +54,19 @@ def run_precompile_assets_task asset_strategy.prepare do cd = "cd #{paths.active_release}" task = "PATH=#{paths.binstubs}:$PATH #{framework_envs} #{precompile_assets_command}" - runner.run "#{cd} && #{task}" + + # This is a hack right now, but I haven't iterated over it enough for a good solution yet. + if config.sync_assets? + shell.status "Compiling assets once on localhost (sync_assets: true)" + shell.logged_system("sh -l -c '#{cd} && #{task}'") + + shell.status "Syncing assets to other remote servers (sync_assets: true)" + runner.servers.remote.run_for_each do |server| + server.sync_directory_command(paths.public_assets) + end + else + runner.run "#{cd} && #{task}" + end end end