問題タブ [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.

0 投票する
0 に答える
163 参照

ruby-on-rails - Rails マルチテナント アプリ

プロジェクト管理ソフトウェアのようなマルチテナント アプリを作成しています。

私の構造では、マルチテナントから除外されたUserテーブルがあります。

ユーザーがサインアップ ページにアクセスし、Company というサブドメイン フィールドに入力してから、このユーザーのスキーマを作成します。そのため、 companyname.example.comとしてアカウントにアクセスできます。これまでのところ、すべて問題ありません。

クリエーター ユーザーのサブドメインを格納するAccountテーブルもあります。

ここで、アカウント権限のテーブルも作成しました。このテーブルには、Account_id と user_id が含まれます。ユーザーは同じメールアドレスで複数の会社に参加できるため、私はそのようなことをしました。

結論;

  • ユーザーテーブル
  • アカウント テーブル
  • Account_permissions (誰かが特定の会社にログインしようとしたときに確認します。複数の会社があるためです。)

これは理にかなっていますか?この場合、何か考えはありますか?

0 投票する
3 に答える
3338 参照

ruby-on-rails - Rails Postgres スキーマの問題 - 次のスキーマのいずれかが無効です: "test" "public"

私はこれに対する答えを高低で検索しましたが、不足しています。

Postgres スキーマに基づいて、Rails 4、Devise、および Apartment を使用してマルチテナント アプリケーションを構築しようとしています。私のローカル Postgres サーバーには、PostgresApp を使用することにしました。Go Rails マルチテナント ガイドに従い、このエラーが表示され始めたときにそのセットアップ (テナントごとに 1 人のユーザー) が機能していました。これは昨日、Devise の Invitable 拡張機能をインストールしようとしているときにローカルで表示され始めましたが、何が起こっているのかについての手がかりが見つからないようです。

特定のエラーを取得する方法は次のとおりです。

ローカルでサイトにアクセスすると、Rails がスローします。

アパート::TenantNotFound

次のスキーマのいずれかが無効です: "www" "public"

ここに私の apartment.rb 初期化子があります:

ここに私のユーザー移行ファイルがあります:

また、コマンド ラインでローカルの Postrgres データベースにもアクセスしました。ドロップが機能し、データベースの作成が機能しています。必要に応じてこれらを提供できます。現時点での私の推測では、Rails が PostgresApp と通信する方法、または移行を行う方法に問題があると言っています。しかし、経験豊富な誰かが、私が見逃していたことを指摘してくれるかもしれません。

だから私の質問は、これを引き起こすために私は何をしているのでしょうか? どうすれば修正できますか?また、何が問題なのかについて詳しく知るにはどうすればよいですか?

0 投票する
0 に答える
57 参照

heroku - 異常な DB の状況 -- Heroku スキーマごとに pg_dump を実行する必要がありますが、これを行う簡単な方法はありますか?

Rails アプリは、各テナントのスキーマを作成する Apartment gem を使用してクライアント データをサイロ化します。Heroku で Postgres 9.4 を使用しています。

約 600 のテナントに到達するまで、すべてが正常に機能していましたが、突然自動 pg バックアップが機能しなくなりました。Heroku サポートから、スキーマの数 (約 30,000) を考慮したテーブルの総数によって pg_dump で OOM エラーが発生したため、バックアップを実行できないことが通知されました。(ローカル マシンに直接 pg_dump を実行しようとしても失敗します。)

Heroku は、たとえば、すべてのスキーマ名をループする bash スクリプトで、スキーマごとにデータをバックアップできることを提案しました。

これは機能しますが、私たちの計算によると、すべてのデータをダウンロードするだけで 40 時間以上かかります (すべてがうまくいったと仮定します)。実際のデータ量はピーナッツ (非圧縮で約 4GB) であるため、これは少しイライラします。

データベースを Amazon RDS にエクスポートすることを検討したいと考えていますが、当社は、顧客がアプリが 2 日間ダウンすることを許容するとは考えていません (すべてがうまくいくと仮定しています)。私たちは成長しており、潜在的な移行のダウンタイムは悪化する一方であり、実質的に Heroku に閉じ込められます。

質問:

  1. このプロセスをスピードアップする方法はありますか? (FWIW、圧縮されていない pg_dump を実行しても、パフォーマンスは向上しないようです。)

  2. これは単なる標準的なデータベース移行のダウンタイムであり、開発者はダウンタイムに対処する必要があることを会社に伝える必要があるだけですか?

0 投票する
1 に答える
1123 参照

ruby-on-rails - rake アセット:データベース接続なしで動的ルートを使用してプリコンパイルする

実稼働用にアセットをコンパイルしようとしていますが、これはローカルでは行われません。

2 つの制約があります。

  • データベースに接続できません (このステップの場合)
  • 通常、データベースから情報を取得する必要がある動的ルートがあります (ただし、アセットのコンパイルには必要ありません)。

基本的に、本番環境の外でビルドされた docker イメージで実行します。データベースに接続できません。dockerfileでenv_varを使用して偽のdbアドレスを直接渡すというトリックを使用していました。

しかし今、私は動的ルートを持っています:

新しいテナント名が追加されたときにルートをリロードするため、これは機能しています。

しかし、アセットをコンパイルする必要がある場合、コンパイルがアプリを初期化し、ルートが実行しようとしたためApartment.tenant_names.join('|')に失敗しました。これは、db 接続なしでは明らかに失敗します。

文字列に置き換えるApartment.tenant_names.join('|')と、データベースは呼び出されず、コンパイルは正常に実行されます。

コンパイル手順がアプリを初期化し、次のようなことを行う条件を作成しようとしているかどうかを確認するために使用できるものはありますか:

何か案が ?

編集:回避策

質問の解決策ではありませんが、今後の参考のための回避策を次に示します。どうやらラムダを使用してもコンパイルエラーは発生しませんでした:

0 投票する
2 に答える
371 参照

ruby-on-rails - Rails 4 Herokuマルチテナンシーアプリがherokuホームページにリダイレクト

わかりましたので、私は本当に迷っており、情報を得るためにここに何を投稿すればよいかさえわかりません.

私はマルチテナンシーの初心者です。アパートメントジェムの使用に関するチュートリアルに従いました。すべてが lvh.me:3000 で完全に機能していますが、アプリを Heroku にプッシュするとエラーは発生しませんが、自分のドメイン pv-development@herokuapp.com にアクセスしようとすると、heroku ホームにリダイレクトされますページ???

ここで助けてください..可能な解決策のためにここに投稿する必要があることを教えてください..これがどこから生じているのかさえわかりません!

患者様、これからよろしくお願いします!

編集#1

これは私のログがherokuから私に与えたものです:

0 投票する
0 に答える
281 参照

ruby-on-rails - デバイスへのログインに失敗した後、アパートメント current_tenant が「パブリック」にリセットされる

認証には Devise を使用し、SAAS アプリでのマルチテナンシー サポートには Apartment を使用します。

ログインに失敗すると、devise はログイン ページ (Users::SessionsController#new) に「リダイレクト」し、Apartment::Tenant.current以前にミドルウェアで設定されたTenantElevator値はデフォルト値の「public」に戻ります。

これは、Devise が実際にログイン ページにリダイレクトするのではなく、新しいラック環境で FailureApp (ログイン ページをレンダリングする) を呼び出し、その応答を返すために発生しています。新しいラック アプリにはTenantElevatorミドルウェアがないため、テナントはラック アプリ内に設定されません。

誰でもこれを修正する方法を知っていますか? TenantElevator ミドルウェアを Failure アプリに追加する方法はありますか?

0 投票する
1 に答える
25 参照

ruby-on-rails - ユーザーでプランバリデーターを使用して、プランが最大許容ユーザー数であるかどうかを確認する方法がわからない Rails 4 Devise Invitable

Apartment Gem を使用して Rails 4 でマルチテナント アプリを構築しています。これはサブスクリプション ベースのアプリケーションであり、プラン タイプによってユーザー数が制限されています。

プラン モデルに次の検証があります (ここにすべてを貼り付けます) が、これを検証して、アカウントが最大容量に達している場合に管理者または所有者がユーザーを招待できないようにする方法がわかりません。

Plan.rb:

機能的には、関連付けられたアカウントのユーザー数が plan_type で許可されている数を超えている場合、所有者がユーザーを追加できないようにしたいと考えています。もしそうなら、アップグレードしてくださいというメッセージをフラッシュしたい..

前もって感謝.. これは私の存在の悩みの種です !!

0 投票する
0 に答える
259 参照

ruby-on-rails - 管理者アカウントからテナント アカウントを管理するための構造

Rails 5 を使用して、マルチテナンシー Web アプリ用の API を作成しようとしています。

しかし、これを可能にするアプリケーション構造を理解するのに苦労しています:

  • ユーザーが自分の組織のアカウントを取得するために自分自身を登録できるようにしたくはありませんが、私たちのスタッフの人々に内部的にアカウントを作成してもらいたいのです。

  • スタッフは各組織のプラットフォーム管理者に招待状を送信して、登録プロセスを完了し、独自のユーザーを招待できるようにする必要があります。登録するための招待 URL は既にサブドメイン化されており、独自のデータベース スキーマ (postgres) 内にレコードが作成されています。

  • 組織の管理者から、さまざまなリソースとアクションへのアクセスを制限するロールの階層が開始されます。

そのタスクを完了するために、同じユーザー モデルの 1 人のユーザーにスーパー管理者のような役割を与えることに不安を感じています。

ユーザーの種類ごとに 2 つの異なるモデルを作成し、1 つ (「システム管理者」) をパブリック スキーマに残して、個別の管理インターフェイスをスピンする必要がありますか?

それは私には少し奇妙に思えますが、おそらく正しいのです。(プラットフォームのユーザー認証情報を保持、識別、および管理するという同じ目的を持つ 2 つの異なるモデルを持つ)

また、正当な理由なくパブリック スキーマにユーザー アカウントを残したくありません。1 人のユーザーが複数の組織に属するケースは、アプリケーションのコンテキストで発生する可能性はほとんどありません。(そして別々のアカウントが望ましいです)

...私の質問は次のとおりです。

スタッフがテナント アカウントの作成を社内で管理できるようにするための、適切で適切なアプリケーション構造とはどのようなものでしょうか?

0 投票する
1 に答える
357 参照

ruby-on-rails - アパートメント テナント レール 4 の外に静的サブドメインを追加する

アパートメント gem を実行しているときに、静的サブドメインを追加しようとすると問題が発生します。

基本的に私は次のようなことをしたい:

ただし、このコードをルート ファイルに配置して docs.mysite.co に移動しようとすると、次のエラーが発生します。

私のルートファイル全体は次のとおりです。

ここでの支援は大歓迎です!さらに情報を追加する必要がある場合はお知らせください!

編集 # 1 Application.rb を追加