如何在控制台上输入后选择特定租户?

时间:2017-02-05 14:08:29

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

以下代码存储在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时都会询问将要装载哪个租户。

谢谢!

4 个答案:

答案 0 :(得分:3)

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

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

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

  

=> “\” tenant1 \ “”

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

答案 1 :(得分:1)

我可以获得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

答案 2 :(得分:1)

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

`Apartment::Tenant.switch!` during `bin/rails console` using `pry`

答案 3 :(得分:0)

这是因为Spring发生的,默认情况下它仅为开发环境配置。只需从Gemfile中删除它,它应该按预期工作。