問題タブ [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.
ruby-on-rails - スコーピング アソシエーションと Apartment gem
これを正しく説明できることを願っています。
私は次のものを持っています:
これらはすべて、アパートメント ジェムのパブリック テナントにあります。会社がテナントです。ここでの考え方は、ユーザーが登録によって会社に関連付けられるということです。Enrollments に他の情報があるので、STI は使用しませんでした。
current_user.enrollments などを呼び出すことができますが、実際に必要なのは、現在のテナントから登録を取得する has_one タイプの関連付けです。
私はこれを追加しました:
呼び出されたときに機能しますが、ランサックなどで検索することはできません
ランサックの場合、次のようなクエリはenrollments_somefield_eq=somevalue
正常に機能しますが、すべての登録を検索しますが、現在の会社の登録のみが必要です。アソシエーションに条件を追加できる場所を見てきましたが、それを使用するモデルでテナント ID を取得できるとは思いません。
ここに何かアイデアはありますか?
アップデート
私はここにいます-大量のグーグルの後、私はこれをまとめました:
本当に欲しい:
しかし、これは機能しません。実際には、企業およびユーザーごとに 1 つの登録しかないためです。active_enrollments
ランサック経由でクエリを実行でき、スコープが適用されるなど、これは十分に近いかもしれません。
ruby-on-rails - マルチテナンシー Rails アプリケーションから heroko デプロイメントへ
ローカルで正常に動作する Apartment gem を使用して Rails マルチテナンシー アプリケーションを開発し、lvh.me:3000/ を使用してテストできましたが、heroku にデプロイできませんでした。ただし、heroku プッシュは、ターミナルでの通常のデプロイ プロセスを終了します。基本的に、私が必要とするのは; myapp.herokapp.com にアクセスする代わりに、subdomain.myapp.herokuapp.com にアクセスできるようにしたいと考えています。現在、アプリの URL にアクセスしようとすると、herko ランディング/ホームページにリダイレクトされます。つまり、アプリが subdomain.myapp.herokuapp.com ホスト名として構成されていない可能性があります。
同様の質問が 2 年以上前に寄せられました: Rails と herokuapp を使用したサブドメイン
ruby-on-rails - 一般的なエレベーターに問題があるrails Apartment gem
アパートを使い始めたばかりで、共有シークレットで機能するエレベーターを開発したいと考えています。しかし、私の最初のテストは有望ではありませんでした。
私が今いるところは、次のことです。
と:
つまり、データベースにリクエストが来るたびに、スキーマとして my_schema_name が使用されます。私のコントローラーには次のものがあります:
そして私のテストは次のとおりです。
テストを実行すると、次のようになります。
これは、スキーマが実行されていないことを示しています。私は正しいですか?もしそうなら、私は何を間違っていますか?
ruby-on-rails - アクティブな管理者とアパートメントの宝石
私は Active Admin を初めて使用しますが、これまで見てきたことから、これは非常に簡単に実装できると思います。
マルチテナンシーを追加するアパートメント ジェムを含むアプリがあります。
アプリにアクティブな管理者を追加しています。Apartment は、PostgreSQL スキーマを使用してデータを分離します。たとえば、デフォルトでは、Apartment のモデルには、次のようなものを呼び出さない限り、「パブリック」テナントがありますApartment::Tenant.switch!('abc')
。
私のアプリでは、モデルUser
とCompany
モデルはパブリック テナントにあり、それ以外はすべてテナントにあります。したがって、テナント モデルにレコードが表示されないことを除いて、既定の Active Admin は正常に動作します。
Apartment::Tenant.switch!('abc')
AA モデル ファイルの 1 つを手動で追加したところ、問題なく動作しました。理想的なソリューションは次のとおりです。
- テナントの
AdminUser
ログがデフォルトに設定されたとき (最初のテナントなど) - テナント化された各モデルには、パラメーター (?tenant=abc) を送信する選択メニューがあり、その後テナントが変更されます。
- アクティブなテナントはおそらく
AdminUser
セッション ストアに保持されるため、切り替えが必要になるまで同じテナント データで作業できます。
私はこれを自分で簡単に行うことができると思いますが、対処する必要がある Active Admin 固有の問題があるかどうかを確認したかったのです。
- AA にはアプリケーション コントローラに相当するものがありますか? メインのロジックとは対照的に、テナントの切り替えロジックをそこに保持しておくとよいでしょう。
- 代替の AA Devise
AdminUser
には、別のセッション変数ストアがありますよね?
任意の提案をいただければ幸いです-整理したら、最終的なソリューション/コードをこの投稿に投稿します。
ruby-on-rails - ActiveRecord + Postgres で「pg_stat_statements」を永続的に無効にする
Rails 4 の Apartment gem を使用して、Rails アプリでマルチテナンシーを管理しています。
この質問で説明されているように、実行を試みる PG Stat ステートメントには、Heroku では許可されていないスーパーユーザー特権が必要です。そのため、指示に従って無効 pg_stat_statements
にしました。
db/schema.rb
しかし、次に移行を作成したときに、この行がファイルに再度追加されていることに気付きました。
enable..
その行を再度追加しないようにアクティブ レコードを構成するにはどうすればよいですか? 私はそれを永久に無効にしたい。
ありがとう!
ruby-on-rails - RSpec around() ブロックは before() + after() とは異なる動作をします
アパートメント ジェムを使用して、マルチテナントの Rails アプリを管理しています。
補足: gem に慣れていない場合、アパートメントを切り替えることは、Postgres DB バックエンドで使用されるスキーマを切り替えることです。アパートのテナントを変更しますApartment::Tenant.switch!(apartment)
特定のアパートのテナントのコンテキストで動作をテストするいくつかのテストがあります。そのために、以下のセットアップを使用します (コントローラーの仕様に示されている例)
ご覧のとおり、テストのセットアップには 2 つのアプローチがあります。1 つはaround()
フックを使用し、もう 1 つは同じことを行いますが、独立してbefore()
とafter()
フックを使用します。
どちらのアプローチも同等であり、交換可能であると思います。しかし、驚くべきことに、実際に機能するのはオプション 2 だけです。
この動作には理由がありますか? ブロックはaround()
ブロックとは異なる順序で実行されbefore()
ますか?
ruby-on-rails - Active Admin でアパートのテナントを切り替える
これは私の以前の投稿の拡張です:
私はこれが機能していると思っていましたが、立ち往生しています。パブリック スキーマにCompany
テナント モデルとして、およびLocations
個々のテナントにモデルがあります。これが私のActive Adminlocation.rb
ファイルです:
skip_authorization skip_policy_scope は、私がまだ AA で抱えている Pundit の問題からのものです。ご覧のとおりApartment::Tenant.switch
、いくつかの場所に を追加してみました。コントローラーブロックの内部は、私がそれを機能させることができる唯一の場所です。
Locations
インデックス ページを読み込むと、正常に動作し、テナントの場所が表示されます。問題は、ダッシュボードまたは他のページに戻ってロケーションに戻って電話Apartment::Tenant.switch
をかけると、AA ログイン画面に戻り、再度ログインできないことです。AA ログアウト パスを手動で入力して、ログアウトを強制します。
これは非常に奇妙で、これをトラブルシューティングする方法が他にわかりません。ログはあまり表示されません。
ここで、セッション変数などを設定するメニュー ドロップダウンを使用していくつかのロジックを追加し、必要に応じてリソース ページを呼び出すつもりApartment::Tenant.switch
でしたが、現時点ではこれはショー ストッパーです。それがDevise、Pundit、Apartment、Active Admin、またはそれらの組み合わせであるかどうかはわかりません.
アップデート
進捗状況 - スイッチの出力を追加しようとしました! ロガーデバッグを呼び出して、問題を「解決」しました。switch 呼び出しを変数に設定すると、それも消えます。
更新 2
前回の更新は間違っていました - 問題は残っています。Deviseに絞り込みました。switch!
Devise が 401 エラーをスローし、最初にあなたを追い出すため、2 番目の呼び出しは呼び出されません。Devise for Active Admin を無効にしましたが、切り替えシステムは正常に動作しています。シンプルな Company ドロップダウンとセッションを使用して、その場でテナントを切り替えることができます。Deviseはどういうわけかこれがまったく好きではありません。
ここに私のAAファイルの要点があります: https://gist.github.com/jasper502/8fd16c31ee26667c5a16
postgresql - sidekiq から PostgreSQL への接続プールを管理するにはどうすればよいですか?
問題数百の sidekiq バックグラウンド プロセスを実行する Rails アプリケーションがあります。それらはすべて 250 の接続を提供することに満足していない PostgreSQL データベースに接続します - それは可能ですが、すべての sidekiq プロセスが誤ってデータベースにクエリを送信すると、それは崩壊します。
オプション 1データベースの前に pgBouncer を追加することを考えていましたが、search_path
どの「国」(PostgreSQL スキーマ) を決定するために各ジョブ処理の開始時に を設定するかに大きく依存しているため、現在はトランザクション モードを使用できません。 (アパートメントジェム)に取り組む。この場合、セッション ベースの接続プーリング モードを使用する必要があります。ただし、これは、私の知る限り、各ジョブの処理後に接続を切断し、接続をプールに解放する必要があり、それはパフォーマンス面で非常にコストがかかりますよね? 私は何かを見逃していますか?
オプション 2アプリケーション層ベースの接続プールを使用することもオプションですが、sidekiq を使用して PostgreSQL でそれを行う方法がよくわかりません。
オプション 3私が思いもよらなかったことはありますか?