进入控制台后如何select特定租户?

How select specific tenant after enter on console?

存储在 config/initializers/console.rb 中的以下代码仅在我第一次执行 rails console CLI 时有效。退出再进入时,不显示选择信息,但加载选择的预览租户。

if defined?(Rails::Console) || $PROGRAM_NAME.include?('spring')
  tenants = Apartment.tenant_names.sort
  default = tenants.first

  puts "Available tenants: #{tenants.join(', ')}"

  print "Select tenant (#{default}): "
  tenant = gets.strip

  Apartment::Tenant.switch! tenants.include?(tenant) ? tenant : default
end

我希望每次在 rails console 输入时询问要加载的租户。

谢谢!

发生这种情况是因为 Spring,默认情况下它仅为开发环境配置。只需将它从您的 Gemfile 中删除,它就会按您预期的那样工作。

我遇到了类似的问题。如果您使用的是公寓 Gem。在您的 rails 控制台中,您可以通过首先连接到数据库然后使用 schema_search_path

在租户之间切换
e.g.
c = Company.connection
c.schema_search_path = "tenant1"

要检查租户是否已切换,请使用 ActiveRecord::Base.connection.schema_search_path

=> "\"tenant1\""

公司只是我数据库中的一个table。

我能得到 Apartment::Tenant.switch 的唯一方法!要在 Rails 控制台中工作,请在项目的根目录中创建以下 .irbrc 文件:

IRB.conf[:IRB_RC] = Proc.new do
  tenants = Apartment.tenant_names.sort
  puts "Available tenants: #{tenants.join(', ')}"

  print "Select tenant: "
  tenant = gets.strip

  unless tenant.empty?
    if tenants.include?(tenant)
      Apartment::Tenant.switch!(tenant)
    else
      puts "Tenant not found in list '#{tenant}'"
    end
  end
  puts "Tenant set to '#{Apartment::Tenant.current}'"
end

这是一个简单的代码(pry 版本),可在 launchconsole

时使用