【问题标题】:Running custom rake task for multi tenant app rails为多租户应用程序轨道运行自定义 rake 任务
【发布时间】:2019-03-13 17:28:14
【问题描述】:

我有一个自定义 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"

但是当我签入控制台时,它只为默认租户播种, 我如何为所有租户播种?

【问题讨论】:

  • 修复了这个。只需在循环中添加Apartment::Tenant.switch!(tenant.name)即可。

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


【解决方案1】:

我知道这才几个月大,但我想我会为未来的人提供帮助。

对于公寓,确保租户在街区后切换回公共的更简洁的方法是执行以下操作:

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

确保它切换回来很重要,因为如果没有,您最终可能会在错误的租户上运行代码。

如果您按照上述Apartment::Tenant.switch!(tenant.name) 的建议进行操作,则租户将保持选中状态,直到您再次切换它。如果下一次切换失败,它会停留在当前租户上,并在错误的 DB 上执行代码。

【讨论】:

  • 是的,@devon quick 对此是完全正确的,我遇到了不将其切换回公共的问题。谢谢
猜你喜欢
  • 2013-03-26
  • 2014-12-05
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2011-12-14
相关资源
最近更新 更多