51 lines
1.8 KiB
Text
51 lines
1.8 KiB
Text
# 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
|
|
|