問題タブ [apartment-gem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - Rails - Apartment - MySQL ドロップ テナント データベース
アパートの宝石とMySQLをデータベースとして使用して、レールでマルチテナントアプリケーションを作成しています。https://gorails.com/episodes/multitenancy-with-apartmentに従ってアパートメントをセットアップしました。
この後、新しいサブドメインを作成するたびに、サブドメインごとに新しいデータベースが作成されました。ここで rake db:drop を実行すると、メイン データベースのみが削除され、すべてのサブドメイン データベースはそのまま残ります。
私の質問は、サブドメイン データベースを削除する方法です。
ruby-on-rails - テナント全体のアパート アクティブ レコード クエリ
マルチテナンシーにApartmentを使用しています。現在のテナントだけでなく、すべてのテナントに対してクエリを実行する方法はありますか?
それを行うための厄介な方法の1つは、次のようなものです
テナントを切り替えることの副作用が何であるかはわかりませんが、テナントをクエリレベルで設定する方法があればいいと思います.
ruby-on-rails - 新しいテナント アパートメント Gem の作成 - 常に再起動しますか?
私は素晴らしいApartment gemを使用したRails 4.2マルチテナントアプリを持っています。
各企業には独自のサブドメインがあります。私はカスタムの「エレベーター」を使用しています。これは完全なリクエスト ホストを調べて、どの「テナント」をロードする必要があるかを判断します。
新しい会社を作成するとき、適切なリクエスト ホストで新しいテナントを作成するための after_create フックがあります。
これには常に、開発と運用の両方でサーバーの再起動が必要なようです。そうしないと、Tenant Not Found エラーが発生します。
開発ではsqliteを使用し、本番ではpostgresを使用しています。
新しいテナントを作成するたびにサーバーを再起動する必要はありますか? これを行う自動化された方法はありますか?イニシャライザをリロードするだけでうまくいくかもしれませんが、それを行う方法がわかりません/それが可能かどうか?
私はこれを1か月間いじっていましたが、うまくいく解決策を見つけることができませんでした. 助けてください!
初期化子/アパートメント.rb
初期化子/host_hash.rb
会社のモデル
何がうまくいったのか
エレベーターの構成を変更して、アパートの宝石にある HostHash の構成を回避し、完全にカスタムのものを使用しました。主にアパートメントの宝石 github の問題に基づいています: https://github.com/influitive/apartment/issues/280
初期化子/アパートメント.rb
アプリ/ミドルウェア/base_site.rb
ruby-on-rails - Rails - セッション変数がアパートメント スイッチを介して保持されない
状況があります。
Apartment gemを使用して、マルチテナントの Time Entry ソリューションを構築しています。これが流れです。私は立ち往生しています。
1) ユーザーがサインアップ ページに到達すると、テナントが作成されます。コントローラーは次のとおりです。
そしてビュー:
ご覧のとおり、これはnew_user_url
、新しい org_identifier (作成されたばかりのテナント) に等しいサブドメインを渡すヘルパーにリダイレクトするように設定されています。
2) 正しい情報が送信されると、テナントの作成後にリダイレクトが発生します。作成が行われていることを確認しました。リダイレクトが正しいことを確認しました。次に、セッション変数はそれ自体を空にします。
ユーザーコントローラー:
ユーザー/新しいビュー:
必要なセッション値として電子メール パラメータを持つ非表示フィールドを含む後続のフォームを送信すると、「電子メールが無効です」というメッセージが表示されます。
私は Apartment gem doc に目を通し、ウェブを精査しました。これが失敗する理由がわかりません。でももちろん、目の前にあるのは確かです。どんな助けでも大歓迎です。
アップデート:
Cookieストアのドメインをすべてに設定し、後でアプリコントローラー内をチェックするこのソリューションを見つけました。私はデバイスを使用していませんが、動作するかどうかを確認します。
ruby-on-rails - I18n がアパートメントの gem レールで翻訳をロードしない
アパートメントgemを使ってマルチテナンシーアプリを作っています。私はそれをすべてセットアップしており、すべてが期待どおりに機能しています。また、Rails Internationalization (I18n) とアクティブなレコード バックエンドを使用して翻訳を保存しています。私の現在のセットアップ
変換表
Apartment.rb 構成
翻訳モデルを除外モデルのリストに追加して、すべてのテナントでグローバルになるようにしました
私の翻訳テーブルには、英語 (デフォルト) とノルウェー語の両方の翻訳があります。メイン ドメインでは、すべてが英語とノルウェー語の切り替えで期待どおりに機能しますが、テナントを読み込むとすべての翻訳が失われます。コンソールでのデモ:
テナント環境で翻訳が欠落している理由がわかりません。私は、Excluded_models のリストに Translation モデルを含めることでうまくいくはずだと考えていましたが、どこかで何かが間違っているようです。手がかりはありますか?ありがとう
ruby-on-rails - Rails マイグレーションで制約を作成する
名前付き制約を作成する移行があります
しかし ではschema.rb
、レールはこの部分をインデックスに変えます
問題は、使用していてApartment
、新しく作成されたテナントに制約の代わりにインデックスがあり、postgreSQL 機能を使用していることです。ON CONFLICT ON CONSTRAINT
今のところ、解決策はいくつかの移行をロールバックして再度移行することですが、これは本当に汚いハックです
レールがこのインデックスを作成するのを止めるには?
ruby-on-rails - アパートメントgemでpg_searchを使用する
pg_search gem を、アパートメント gem によって有効化されたマルチテナント アプリケーションと組み合わせて使用しようとしています。アパートメントは、データをテナントごとのスキーマで分離します。各テナント内での検索は pg_search のデフォルト設定でうまく機能しますが、pg_trgm を有効にするとうまくいきません。
「共有拡張機能」と呼ばれる別のスキーマを追加し、その上で pg_trgm 拡張機能を有効にすることで、データベースで pg_trgm 拡張機能を有効にしました。このスキーマは、アパートメントを構成することにより、常に検索パスに含まれます。
しかし、モデルのトライグラム検索を実行しようとすると、エラーが発生します。
これにより、pg_trgm が正しく有効化されていないと思われますが、データベースで次のクエリを問題なく実行できます。
どんな助けでも大歓迎です!ありがとう
ruby-on-rails - アパートの宝石のテナントのコピーを作成する
PostgreSQL でアパートメント gem を使用しており、データを含む既存のテナントのコピーを作成する必要があります。考えられる 1 つの方法は、テナントからすべてのデータを収集してから、テナントを切り替えてレコードの作成を開始することです。以下は小さなデモンストレーションです。モデルは、コピーされるモデルのリストです。
どんな助けでも大歓迎です。
ruby-on-rails - Rails: Devise と Apartment gem によるマルチテナンシー
devise
とapartment
gemsを使用してマルチテナント アプリを作成しています。postgresql データベースを使用しています。いくつかのモデルを作成しました。「User」モデルはグローバル名前空間にあり、devise gem による認証に使用されます。テナントの名前空間には、他にもいくつかのモデル (プロジェクト、設定など) があります。
このマルチテナンス アプリを作成するには、このチュートリアルに従いました: https://gorails.com/episodes/multitenancy-with-apartment?autoplay=1
関連するアカウント (user1@gmail.com と user2@gmail.com など) から 2 つの別個のサブドメイン (user1.example.com と user2.example.com など) にログインすると、マルチテナンシー機能は正常に機能しています。 ) 正常に動作し、テナントごとに一意のレコードを作成できます。
ここでの問題は、任意の電子メールを使用して任意のサブドメインにログインでき、アドレス バーに存在するサブドメインに基づいてテナント レコードが表示されることです。たとえば、user1@gmail.com
at でログインすると、認証に成功し、テナントuser2.example.com
のレコードが表示されます。user2
私の質問は、ログイン中に、現在のユーザーのサブドメインが要求されたサブドメインと一致するかどうかを確認する方法 (アドレスバー上) です。一致する場合は認証に進み、管理ダッシュボードを表示し、そうでない場合 (間違ったサブドメインまたは TLD からログイン) を認証します。ユーザーを関連するサブドメインのダッシュボードにリダイレクトします。どうやってやるの?
更新#1:
マイナー デバイス構成を使用して、ユーザー ログインを特定のサブドメインに制限することができました。devise.rb
ファイルでは、認証キーのリストに属性を追加し:subdomain
たため、電子メールとともに正しいサブドメイン値もチェックされますが、サブドメイン値をログインフォームに正しく提供する方法がわかりません. このような非表示フィールドをログイン フォームで<%= f.hidden_field :subdomain, value: request.subdomain %>
使用できますが、ユーザーがブラウザのインスペクターから値を変更できるため、ハッキング可能です。
更新#2:
ユーザーのログインを特定のサブドメインに制限するための簡単な方法を適用することができました。私はこの方法に従いました: https://github.com/plataformatec/devise/wiki/How-to:-Scope-login-to-subdomain
現在、私の唯一の問題は、ユーザーがTLD(example.comなど)からログインできないことです。可能にしたいのですが、ログイン後、ユーザーは関連するサブドメインにリダイレクトされ、セッションが有効になっている必要があります。