为多租户应用程序导轨运行自定义耙任务

时间:2019-03-13 17:28:14

标签: ruby-on-rails multi-tenant rake-task apartment-gem

我有一个自定义的rake任务

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"

但是当我签入控制台时,它仅是默认租户的种子, 我该如何为所有租户种籽?

1 个答案:

答案 0 :(得分:0)

我知道这已经几个月了,但是我想我会为将来的人提供帮助。

使用Apartment时,更清洁的方法是确保房客在该街区之后切换回公共场所:

Apartment::Tenant.switch(tenant.name) do
  #Your code in this block.
end

确保将其切换回去很重要,因为如果不这样做,最终可能会在错误的租户上运行代码。

如果您按照Apartment::Tenant.switch!(tenant.name)的建议进行操作,则租户将保持选中状态,直到再次切换。如果下一个开关发生故障,它将停留在当前租户上,并在错误的数据库上执行代码。