运行 多租户应用的自定义 rake 任务 rails
Running custom rake task for multi tenant app rails
我有一个自定义抽成任务
namespace :abc do
desc "seeds abc to a database" do
task seed_abc: :environment do
Tenant.find_each do |tenant|
puts "Running task for tenant#{tenant.name}"
Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each do |filename|
p "Seeding #{filename}"
load(filename) if File.exist?(filename)
end
end
end
end
当我 运行 rake 任务时,它只在默认租户中播种,但在播种时我可以看到
Running task for tenant abc
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
Running task for tenant xyz
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
Running task for tenant 123
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
但是当我签入控制台时,它只为默认租户播种,
我如何为所有租户播种?
我知道这已经有几个月了,但我想我会对未来的人有所帮助。
对于公寓,确保租户在封锁后切换回 public 的更简洁方法是执行以下操作:
Apartment::Tenant.switch(tenant.name) do
#Your code in this block.
end
确保它切换回来很重要,因为如果没有切换回来,您可能会在错误的租户上结束 运行 代码。
如果您按照上面的建议操作 Apartment::Tenant.switch!(tenant.name)
,租户将保持选中状态,直到您再次切换它。如果下次切换失败,它会留在当前租户上,并在错误的数据库上执行代码。
我有一个自定义抽成任务
namespace :abc do
desc "seeds abc to a database" do
task seed_abc: :environment do
Tenant.find_each do |tenant|
puts "Running task for tenant#{tenant.name}"
Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each do |filename|
p "Seeding #{filename}"
load(filename) if File.exist?(filename)
end
end
end
end
当我 运行 rake 任务时,它只在默认租户中播种,但在播种时我可以看到
Running task for tenant abc
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
Running task for tenant xyz
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
Running task for tenant 123
"Seeding /path...../path/filename.rb"
"Seeding /path...../path/filename.rb"
但是当我签入控制台时,它只为默认租户播种, 我如何为所有租户播种?
我知道这已经有几个月了,但我想我会对未来的人有所帮助。
对于公寓,确保租户在封锁后切换回 public 的更简洁方法是执行以下操作:
Apartment::Tenant.switch(tenant.name) do
#Your code in this block.
end
确保它切换回来很重要,因为如果没有切换回来,您可能会在错误的租户上结束 运行 代码。
如果您按照上面的建议操作 Apartment::Tenant.switch!(tenant.name)
,租户将保持选中状态,直到您再次切换它。如果下次切换失败,它会留在当前租户上,并在错误的数据库上执行代码。