sql >> データベース >  >> RDS >> Mysql

Railsマルチテナントアーキテクチャ、複数のテナントへのアクセスの範囲

    私が最初にそれを始めたとき、Railsアプリケーションでマルチテナンシーの多くの例を見つけましたが、私も完全に快適に感じるものを見つけることができませんでした。しかし、私はついに満足のいく解決策を手に入れました。

    「スコープ付きマルチテナンシー」レールキャストから始めました

    http://railscasts.com/episodes/388-multitenancy-with-scopes

    次に、このガイドを使用して、デバイスのサブドメインでマルチテナンシーを機能させる方法を検討しました。

    https ://github.com/plataformatec/devise/wiki/How-To:--Isolate-users-to-log-into-a-single-subdomain

    しかし、私はそれを額面通りに受け止めませんでした。 deviseがそのようにどのように機能したかを本当に理解するために飛び込みました。

    それがすべて整ったら、マルチテナントの宝石の準備ができました:

    https://github.com/wireframe/multitenant

    しかし、私はそこで止まりませんでした。マルチテナントgemでは、適切なスコープを設定する場合は常にMultitenant.with_tenantと言う必要があるため、次のようなTenantControllerを作成しました。

      around_filter :scope_current_tenant
    
      def scope_current_tenant
        begin
          Firm.current = Firm.find_by_subdomain!(request.subdomain)
        rescue
          raise ActionController::RoutingError.new('Not Found')
        end
    
        Multitenant.with_tenant Firm.current do
          yield
        end
    
        ensure
          Firm.current = nil
        end
      end
    

    次に、テナントによってスコープを設定したいコントローラーは、ApplicationControllerではなくTenantControllerから継承します。そうすれば、コントローラーの詳細について何も覚えておく必要がなく、「うまくいった」のです。開発者が考えなければならなかったのは、「これはテナントデータを処理するコントローラーですか?」

    だけでした。

    これはまだ開発者がいくつかのことを正しく行うことに依存していますが(モデルで「acts_as_multitenant」と言って適切なコントローラーから継承しますが、実際には非常にうまく機能します。



    1. OracleD2kFormsでPLSQLコードのパフォーマンスを調整またはテストする方法

    2. PGD​​ay.IT2011の早期登録が開始されました

    3. 警告:mysql_num_rows()は、パラメーター1がリソースであると想定しています。ブール値は/home/folder/public_html/folder/folder/login.phpの18行目にあります。

    4. WM_CONCAT関数に相当するSQLServer