2010-03-16 10 views
18

Ich bin ziemlich neu bei Rails und Heroku, aber ich denke ernsthaft darüber nach, es als Plattform für die Bereitstellung meiner Ruby/Rails-Anwendungen zu verwenden.DB-Verwaltung für Heroku-Anwendungen

Ich möchte die ganze Macht von Heroku verwenden, also bevorzuge ich das "eingebettete" PostgreSQL von Heroku anstelle des Addons für Amazon RDS für MySQL, aber ich bin nicht so zuversichtlich ohne die Möglichkeit, auf meine Daten zuzugreifen ein SQL-Client ...

Ich weiß, dass Sie in einer gut gemachten App müssen Sie nicht auf DB zugreifen, aber es gibt einige Situationen (Zeilen zu einer Config-Tabelle hinzufügen, Daten nicht in einer Ansicht zugeordnet, aktualisieren Sie einige Spalten für Debugging-Probleme, Leistungsüberwachung, Ausführen von Abfragen für die Berichterstattung, etc.) wenn dies gut sein kann ...

Wie lösen Sie dieses Problem? Was hast du in einer echten App von Heroku erlebt?

Danke!

+0

Eine weitere Frage, die nicht direkt auf diesem spezifischen Thread, aber sprechen über Heroku Bereitstellung und DB ist: Eine schlechte Seite zu Heroku schieben ist, dass ich den Code (und den Server automatisch neu starten) vor dem Ausführen meiner db-Migrationen schieben muss. Dies kann bei der Navigation der Website zu Fehlern führen ... Eine Lösung könnte der Wartungsmodus sein, aber ich möchte einen Weg ohne Nachteile haben und meine Webapps immer laufen lassen. Gibt es einen Weg? Zum Beispiel mit Capistrano: - Ich bereite den Code für die Bereitstellung in einem neuen Verzeichnis - Ich laufen (rückwärts) Migrationen - Ich swith Server auf das neue Verzeichnis ... und ich habe keine Ausfallzeit. – zetarun

Antwort

11

Ich benutze es seit ungefähr einem Jahr. Ich mag den Workflow, den es bietet, aber ich finde, dass es keinen wirklichen Ärger gibt, auf die Daten zugreifen zu können. Ihre Optionen für die Arbeit mit der Datenbank sind:

Taps: In der Theorie erstellen Sie Ihre Datenbank, wie Sie wollen, lokal und verwenden Sie Taps, um sowohl Schema als auch Daten nach Heroku zu kopieren. In der Praxis ist es meistens erstaunlich gut. Allerdings beschäftige ich mich gerade mit der Bereinigung nach dem Taps, übersetzte einige meiner Spalten schlecht und korrumpierte meine Daten.

Heroku-Konsole: Völlig in Ordnung für alle üblichen ActiveRecord Zeug, aber am nächsten, die Sie auf die Datenbank zugreifen können, ist ActiveRecord :: Base.connection.execute "einige sql". Wenn Sie sich wundern, dass Sie andere Tabellenbefehle wie diese ausführen, werden Sie wissen, dass Sie in Schwierigkeiten sind.

Sie bieten auch ein "Bundle" als eine Methode zum Sichern Ihrer App.Auf diese Weise können Sie Ihren gesamten Code und einen SQL-Dump der Datenbank herunterladen. Die Schwierigkeit besteht darin, dass es keinen direkten Datenbankzugriff gibt, da es keine Möglichkeit gibt, denselben sql-Dump zurück in die Datenbank zu laden, so dass Sie von dataloss wiederherstellen können, was für mich der Ausgangspunkt dieser Dump-Dateien ist. Alles, was Sie für das Bundle verwenden können, ist, eine neue Anwendung zu erstellen (heroku bundles: animate), eine aktuelle App nicht wiederherzustellen.

Ich würde gerne etwas falsch/falsch sein. Dies scheint ein merkwürdiger Fehler in dem am besten durchdachten Service zu sein, den ich kenne. Der Datenbankzugriff hat normalerweise nicht den Anschein, als ob er aufgibt, wenn das meiste, was Sie tun, so einfach gemacht wird.

Datenbankzugang ist für mich wie ein Feuerlöscher. Normalerweise keine große Sache, aber wenn es darauf ankommt, ist es sehr wichtig.

+0

Hallo Schlafmütze, das Problem der Taps ist, dass es gut ist, nur lokal die Datenbank zu kopieren, um einige Abfragen auszuführen, um der Produktionsdatenbank keine Daten hinzuzufügen. Kannst du besser das Problem erklären, das du mit Taps hattest? Die sql-Ausführung von Heroku kann eine gute - wenn auch unbequeme - Lösung sein (nur zum Auswählen und Einfügen, nicht verändern oder ablegen :)). was du über das Bundle sagst, ist wirklich traurig: nicht möglich, dass Heroku einen "korrupten" Backup-Dienst anbietet ... es wäre schön einige andere Meinungen zu hören (vielleicht positiv :)). Definitiv: Verwenden Sie Amazon RDS mit Heroku oder sind Sie gut mit PostGres? :) – zetarun

+0

Taps ist anscheinend der einzige Weg, um eine große Menge an Daten in Heroku zu bekommen. Mein Problem damit ist, dass es sich anscheinend (über ein paar Push/Pull-Operationen) von Dezimal (11,0) (wie in der Migration angegeben) zu Numerisch (11,0) zu Ganzzahl, zu Int (11) mit geändert hat beschädigte Daten (in meiner Dev-Datenbank). Ich hatte gehofft, dass das Chaos durch das Erstellen einer neuen App mit allen Daten in meinem Bundle, aber Bundles aufgeräumt: Animate erstellt eine neue App, lädt aber keine Daten oder Code! Das bedeutet, dass ich wieder Taps verwende, was das Problem verursacht hat. Ich mag Heroku immer noch sehr, aber sie müssen wirklich daran arbeiten. – mikewilliamson

6

Ich benutze admin_data, um mir einen Einblick zu geben, was vor sich geht. Ich habe es erfolgreich auf Heroku und anderen Hosting-Providern verwendet.

4

Zunächst lassen Sie mich damit beginnen, dass heroku ist genial. Ich habe eine großartige Erfahrung bei der Bereitstellung meiner Anwendung und der Integration mit anderen Diensten wie websolr gemacht.

das gesagt ist, Ihre Fragen:

auf Ihre Daten bekommen

Wenn Sie möchten, um Ihre Daten erhalten können, können Sie taps benutzen, um Ihre Remote-Datenbank herunterzuziehen lokal. Dies kann für das Debuggen nützlich sein.

Leistungsüberwachung

Verwenden Sie neue Relikt RPM. Dies kommt als Teil von heroku, Sie können es aus dem Add-ons-Menü aktivieren.

Add-hoc-Datenbank abfragt

Sie könnten einen Controller schreiben, die Sie beliebige SQL und die Ergebnisse auszuführen erlaubt, aber das ist nicht etwas, was ich empfehlen würde. Wie empfehlen admin_data ist eine gute Lösung für die Verwaltung Ihrer Daten, aber wenn Sie etwas komplizierter machen möchten, müssen Sie auf den Code selbst schreiben.

+0

Hi jonnii, danke für deine Antwort. Ich habe versucht, Taps, aber es ist nur gut, die Datenbank lokal zu kopieren, um einige Abfragen auszuführen, um der Produktionsdatenbank keine Daten hinzuzufügen (mit Ausnahme der ersten anfänglichen Wiederherstellung). admin_data kann gut sein (wäre toll, wenn es die Ausführung von SQL-Code erlaubt :)), aber ich kann keine Zeilen hinzufügen (denke über Daten in einer Konfigurationstabelle hinzufügen) ... Ich muss versuchen, wie ich mich mit ActiveRecord fühle :: Base.connection.execute "einige sql" (wie Sleepycat sagte). – zetarun

Verwandte Themen