10

Ich entwickle eine Multitenant-App nach this article. Das Problem ist, wenn ich alle Migrationen das erste Mal ausführe. In schema.rb Datei sind nur die Tabellen für das öffentliche Schema aber was ist mit den anderen Schemas passiert? und wie kann ich andere Schemas mit unterschiedlicher Struktur zu der public erstellen Ich möchte keine Edelsteine ​​verwenden.Postgres Multiple Schema-Datenbank in Rails verwenden

siehe Beispiel unten

Tisch für öffentliches Schema

class CreatePerspectives < ActiveRecord::Migration include MultiSchema def up with_in_schemas :only => :public do # Create table perspectives end end def down with_in_schemas :only => :public do drop_table :prespectives end end end 

Tabelle erstellt wird für private Schemata

class CreateObjectives < ActiveRecord::Migration 

    include MultiSchema 

    def change 
    with_in_schemas :except => :public do 
     # Create objectives table 
    end 
    end 
end 

schema.rb

erstellt werden
ActiveRecord::Schema.define(version: 20130810172443) do 

    create_table "perspectives", force: true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 
end 
+0

Ich verstehe nicht, warum Sie mehrere Schemas benötigen? Können Sie nicht nur einen verwenden und bestimmte Informationen für Benutzer aufgrund ihrer Rolle unzugänglich machen? –

+0

Ich habe Postgres seit Jahren benutzt und geliebt und bin sehr vertraut mit Schemas und deren Verwendung. Ich bin auch ein Rails-Entwickler. Das heißt, ich würde die beiden niemals zusammen benutzen, wenn es nicht nötig wäre. Du musst nicht. Entwerfe einfach dein Datenlayout (normalerweise würde ich dies ein "Schema" nennen, aber ich möchte das Problem nicht verwirren) und füge eine weitere Tabelle namens "Firma" hinzu oder was auch immer die Datensätze besitzen. Dann geben Sie es in verschiedenen Tabellen. Ich habe ein paar Apps wie diese und es ist nicht schwer. –

Antwort

1

Kennen Sie Wohnung Juwel? https://github.com/influitive/apartment

Ich verwendete in einem Projekt in diesem Jahr, dass man Multi-Schema mit Postgresql unterstützt. Alles ist dokumentiert und einfach zu bedienen. Und Sie können den Middleware-Modus wählen. Wenn Sie beispielsweise auf die Domäne customer.applicationdomain.com zugreifen, kann die Anwendung das richtige Schema für Sie auswählen. Übrigens können Sie auch Hintergrundjobs mit sidekiq verwenden.

+0

Die Frage besagt ausdrücklich, dass Edelsteine ​​keine Option sind. – Djizeus