标签: apartment-gem

25
推荐指数
1
解决办法
5638
查看次数

公寓红宝石宝石:想赶上例外

我正在使用这间公寓一颗红宝石.

我在application.rb文件中添加了这个:

config.middleware.use 'Apartment::Elevators::Subdomain'
Run Code Online (Sandbox Code Playgroud)

当我尝试在浏览器url'test.domain.local:3000'中点击此内容时,PostgreSQL中不存在子域'test'架构,我看到此错误

Apartment::SchemaNotFound (One of the following schema(s) is invalid: test, "public")
Run Code Online (Sandbox Code Playgroud)

我知道这是gem的正常行为但是想要捕获这个异常并将用户重定向到其他页面,我该怎么做?

ruby ruby-on-rails-3 apartment-gem

11
推荐指数
1
解决办法
1519
查看次数

Heroku + Apartment PG ::错误:错误:函数pg_stat_statements_reset()不存在

我在Rails 4中使用Apartment gem来支持Heroku上的Postgres 9.3.3中的多租户.

Apartment gem创建新租户时发生错误.

深入调查显示已创建架构,但内部没有表格.

Heroku日志显示错误:

PG::Error: ERROR:  function pg_stat_statements_reset() does not exist
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-4 heroku-postgres postgresql-9.3 apartment-gem pg-stat-statements

9
推荐指数
1
解决办法
1489
查看次数

如何使用postgres模式设置Minitest灯具来测试Apartment

我正在使用Apartment Gem和Postgresql 9.4.1在Rails中构建一个多租户应用程序.

我使用Minitest并且不知道RSpec.

如何设置Minitest灯具以在公共架构中放置一些灯具/数据以及在特定架构中放置一些其他数据?

示例: Accounts是我的非架构表,其余的是模式.我试图设置我的灯具前缀模式名称,如下所示:

  • accounts.yml
  • schema1.users.yml
  • schema1.projects.yml

这只是失败了:

PG::UndefinedTable: ERROR:  relation "schema1.customers" does not exist
Run Code Online (Sandbox Code Playgroud)

所以它试图将数据放入正确的模式,模式就不存在了.

看起来我需要一种方法来在迁移或首次构建测试数据库时构建租户/模式,例如:

Apartment::Tenant.create('schema1')
Run Code Online (Sandbox Code Playgroud)

然后正常的minitest预加载会将灯具数据放入适当的架构中.

不确定在何处/何时/如何发生这种情况.

有任何想法吗?

ruby-on-rails fixtures minitest apartment-gem

7
推荐指数
0
解决办法
392
查看次数

使用 structure.sql 而不是 schema.rb 为 MySQL 配置公寓宝石以创建新租户

我需要在我的 Rails 应用程序中查看 SQL 和存储过程,所以我必须从 schema.rb 更改为 structure.sql。这是我的配置config/application.rb

config.active_record.schema_format = :sql
Run Code Online (Sandbox Code Playgroud)

但是当我在 seed.rb 中为实体创建新记录时

Company.create(
        name: 'Google',
        subdomain: 'google'
      )
Run Code Online (Sandbox Code Playgroud)

发生错误

my_project/db/schema.rb 还不存在

我不知道是什么问题。我是否错过了 cofig 中的某些内容,某处仍然需要 schema.rb 或者我错过了一些 rake 任务命令?我刚用

rake db:migrate db:test:prepare
Run Code Online (Sandbox Code Playgroud)

关注这个博客https://rietta.com/blog/2013/11/28/rails-and-sql-views-for-a-report/#setting-up-the-sql-view

更新:我正在使用apartment-gem并且Company实体是租户。

这里是配置 apartment.rb

Apartment.configure do |config|
  config.excluded_models = %w{ Company CommonField }
  config.tenant_names = lambda{ Company.pluck(:subdomain) }
  # ==> PostgreSQL only options
  config.use_schemas = true

  # Apartment can be forced to use raw SQL dumps instead of schema.rb for 
  # …
Run Code Online (Sandbox Code Playgroud)

ruby mysql ruby-on-rails apartment-gem

7
推荐指数
1
解决办法
587
查看次数

如何从sidekiq管理到PostgreSQL的连接池?

问题我有一个运行几百个sidekiq后台进程的rails应用程序.它们都连接到一个PostgreSQL数据库,它对提供250个连接并不十分满意 - 它可以,但如果所有sidekiq进程意外地向db发送查询,它就会崩溃.

选项1我一直在考虑在数据库前添加pgBouncer,但我目前无法使用它的事务模式,因为我高度依赖于search_path在每个作业处理的开头设置以确定哪个"国家"(PostgreSQL模式)工作(公寓宝石).在这种情况下,我将不得不使用基于会话的连接池模式.然而,据我所知,这会要求我在每次作业处理后断开连接,将连接释放回池中,这样做性能真的很高,不是吗?我错过了什么吗?

选项2使用基于应用程序层的连接池也是一个选项,但是我不确定我如何能够使用sidekiq为PostgreSQL做到这一点?

选项3我没有想到的东西?

postgresql connection-pooling pgbouncer sidekiq apartment-gem

6
推荐指数
1
解决办法
1018
查看次数

Rails&Apartment:根据cookie或域名转换租户

我正在使用Apartment gem和Rails 4.1 设置多租户应用程序.

我的方法是管理界面将托管在单个域上,然后在自定义域上提供特定于租户的数据.管理用户将能够属于多个租户,并且能够在管理界面中切换租户而无需切换域.

使用Apartment,我已经能够使用会话cookie在租户之间切换而没有任何问题.这是我的代码:

class ApplicationController < ActionController::Base
  before_filter :check_tenant

  private 

  def check_tenant
    if session[:current_tenant] and Apartment::Tenant.current_tenant != session[:current_tenant]
      Apartment::Tenant.switch(session[:current_tenant])
    elsif !session[:current_tenant]
      Apartment::Tenant.switch() # Revert to the primary tenant
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我遇到的困难是,Apartment在中间件级别提供了基于域名的切换,我希望保持这种方式,因为我认为中间件比使用before_filter更快.我看到如何实现一个通用的中间件来根据请求切换租户,但我似乎无法访问和解密传递给中间件的proc中的会话存储.

由于使用会话存储似乎对管理界面有意义,您是否有任何关于在中间件级别访问会话存储的建议,或者将这两个方向放在一起的其他选择?

或者我只是担心让租户转换到中间件级别?

session ruby-on-rails multi-tenant apartment-gem

5
推荐指数
0
解决办法
1214
查看次数

如何在Heroku升级中测试多租户应用程序?

我目前正在使用Rails,Heroku和Apartment gem创建一个多租户应用程序.(请注意我知道在Heroku上使用多租户应用程序结构的限制超过10个不同的数据库).我正确设置了我的应用程序,并使用lvh.me让子域在本地正常工作.

自从推送到XXX-staging.herokuapp.com以来,XXX-staging已经是一个子域,所以它抛出了错误:

Apartment::TenantNotFound (One of the following schema(s) is invalid: "XXX-staging" "public"):
Run Code Online (Sandbox Code Playgroud)

有没有办法在Heroku登台环境中测试子域,或者是用另一个SSL通配符购买备用URL的唯一方法?我更愿意,如果那不是我必须做的,因为它可能是昂贵的.

ruby-on-rails heroku multi-tenant apartment-gem

5
推荐指数
0
解决办法
378
查看次数

如何使用公寓宝石处理电子邮件中的网址

我正在使用apartmentgem 进行多租户。

除了我电子邮件中的 url 之外,一切正常。因此,对于从任何请求和后台作业发送的每封电子邮件,都使用default_url_options主机。

关于如何处理电子邮件中的主机切换的任何建议?

ruby-on-rails apartment-gem

5
推荐指数
2
解决办法
975
查看次数

如何测试 Apartment、Minitest、Capybara 和 Selenium

我是 Minitest 和 Apartment 的新手,很难正确配置环境以运行测试用例。我想使用 Capybara & Selenium 进行验收测试。当我运行测试时,我收到以下错误消息:

Apartment::TenantNotFound:         Apartment::TenantNotFound: One of the following schema(s) is invalid: "test-tenant" "public"
Run Code Online (Sandbox Code Playgroud)

所以似乎没有正确创建租户。Apartment gem 有关于如何将它与 Rspec 一起使用的说明,但我不知道如何在 Minitest 中进行类似的设置。应该如何定义租户,以便 Minitest 可以看到它们?

我的 test_helpers.rb:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
require "minitest/rails/capybara"
Minitest::Reporters.use!

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all
end

class ActionController::TestCase
  include Devise::TestHelpers
end

class ActionDispatch::IntegrationTest
end
Run Code Online (Sandbox Code Playgroud)

和测试用例:

require "test_helper"

class LoginTest < Capybara::Rails::TestCase
  def setup
    Apartment::Tenant.drop( "test-tenant" …
Run Code Online (Sandbox Code Playgroud)

selenium ruby-on-rails minitest capybara apartment-gem

5
推荐指数
1
解决办法
1778
查看次数