Skip to content

Instantly share code, notes, and snippets.

@eimermusic
Created June 9, 2014 08:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eimermusic/43f80f435378eda852f4 to your computer and use it in GitHub Desktop.
Save eimermusic/43f80f435378eda852f4 to your computer and use it in GitHub Desktop.
Multi-tenant switching rake task
# runs other rake tasks with domain scoping applied.
# Like so:
# bundle exec rake domain:one TASK=namespace:task DOMAIN=customer1.example.com
# bundle exec rake domain:all TASK=namespace:task
namespace :domain do
desc 'Run a rake task ENV[TASK] on a single domain ENV[DOMAIN]'
task :one => :environment do
raise Exception.new, "You must provide ENV['TASK'] and ENV['DOMAIN']" if ENV['TASK'].nil? || ENV['DOMAIN'].nil?
set_domain(ENV['DOMAIN'])
puts "Invoking task #{ENV['TASK']} in #{ENV['DOMAIN']}"
Rake::Task[ ENV['TASK'] ].invoke
end
desc 'Run a rake task ENV[TASK] on all domains'
task :all => :environment do
raise Exception.new, "You must provide ENV['TASK']" if ENV['TASK'].nil?
Domain.all.each do |domain|
puts "Invoking task #{ENV['TASK']} in #{domain.name}"
set_domain(domain.name)
puts "Domain is now: #{domain.name}"
Rake::Task[ ENV['TASK'] ].reenable
Rake::Task[ ENV['TASK'] ].invoke
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment