allow to enable/disable plugins in deploy

This commit is contained in:
wvengen 2014-01-15 21:41:54 +01:00
parent 46b36c42bd
commit d496c452e6
2 changed files with 54 additions and 0 deletions

View File

@ -42,5 +42,8 @@ namespace :deploy do
after :finishing, 'deploy:cleanup'
# see lib/capistrano/tasks/plugins.cap
#before 'bundler:install', 'enable_plugins:auto'
end

View File

@ -0,0 +1,51 @@
# Capistrano tasks for enabling/disabling foodsoft plugins in the Gemfile
#
# Please note that the foodsoft plugins should be present already in the
# Gemfile, either commented out or not.
#
# To automatically enable the desired plugins on deployment, create the
# file `config/plugins.yml` in the shared directory, containing the
# key `enabled` with a list of enabled plugin names (without foodsoft_).
# Then add to your `config/deploy.rb`:
# before 'bundler:install', 'enable_plugins:auto'
desc 'Enable only the foodsoft plugins, cap enable_plugins PLUGINS=wiki,messages'
task :enable_plugins do
on roles(:app), in: :groups do
unless env['PLUGINS'].nil?
enable_foodsoft_plugins(ENV['PLUGINS'].split(/,\s*/))
else
raise 'You need to set the PLUGINS environment variable to enable specific plugins'
end
end
end
namespace :enable_plugins do
desc 'Enable the foodsoft plugins specified in shared/config/plugins.yml, if it exists (key `enabled`).'
task 'auto' do
on roles(:app), in: :groups do
text = capture :cat, shared_path.join('config/plugins.yml'), '||true'
if text
plugins = YAML.load(text)
enable_foodsoft_plugins(plugins['enabled']) if plugins and not plugins['enabled'].nil?
end
end
end
end
# need to run in role
def enable_foodsoft_plugins(plugins)
gemfile = capture :cat, release_path.join('Gemfile')
gemfile.gsub! /^\s*(#)?\s*(gem\s+(['"])foodsoft_(.*?)\3)/ do |c|
(plugins.index($4) ? '' : '#') + $2
end
upload! StringIO.new(gemfile), release_path.join('Gemfile')
# since we updated the Gemfile, we need to run bundler in non-deployment mode
new_bundle_flags = fetch(:bundle_flags).split(/\s+/)
new_bundle_flags.reject! {|o| o=='--deployment'}
new_bundle_flags << '--no-deployment'
set :bundle_flags, new_bundle_flags.join(' ')
end