rubyforen.de
http://forum.ruby-portal.de/

Datenbanken einbinden - OHNE Migration und Seeding
http://forum.ruby-portal.de/viewtopic.php?f=14&t=26756
Seite 1 von 1

Autor:  AxelRHD [ 07 Mär 2016, 21:47 ]
Betreff des Beitrags:  Datenbanken einbinden - OHNE Migration und Seeding

Hallo Ruby-Gemeinde,

ich beschäftige mich seit einiger Zeit damit, unsere Firmendaten (teilweise aus einem LVS-System [Live, Oracle], teilweise aus einer Reporting-DB [Data-Warehouse, MySQL]) webbasiert darzustellen. Dabei habe ich mich ein wenig mit AngularJS als Frontend und einem Node-basierten REST-Backend verweilt und bin in dieser Zeit auf Ruby on Rails gestoßen, welches mich aufgrund der engen Verzahnung mit Datenbank-Anwendungen sofort überzeugt hat.

Ich habe mich bereits durch mehrere Tutorials gearbeitet und denke, ich habe die Grundzüge durchaus verstanden. Nur bei einem Punkt bin ich mir nicht sicher, aber genau an diesem kann ich mir absolut keinen Fehler erlauben. Kann ich Datenbanken anbinden, ohne dass diese jemals von Rails / Rake (db:) angefasst werden (insbesondere beim deployment)? Bei google findet man bei dieser Suche lediglich schwammige Antworten oder Antworten bezüglich "Migrationen ohne Datenbank".

Besten Dank im Voraus.

Gruß
AXEL

Autor:  Manchotix [ 07 Mär 2016, 22:41 ]
Betreff des Beitrags:  Re: Datenbanken einbinden - OHNE Migration und Seeding

Hallo und Willkommen im Forum :)

Also um deine Frage zu beantworten: Ja! Du kannst die Datenbanken in Rails einbinden und dafür sorgen das sie nicht verändert werden dafür musst du halt nur für die Verbindung einen User auf die DB einloggen lassen der nur Lesen darf.
Wenn du das nicht brauchst und auch schreiben willst was man ja oft eigentlich will würde ich einfach mal sagen ein Backup von den Datenbanken zu machen oder ähnliches und dir vielleicht eine Testumgebung bauen mit denn Datenbestand.

Aber ich denke auch mal das du sowas hier suchst ein Dump von dem Datenabnk shema.
https://hackhands.com/ruby-rails-tutorial-creating-rails-instance-existing-mysql-db/

mfg Manchotix

Autor:  AxelRHD [ 08 Mär 2016, 18:34 ]
Betreff des Beitrags:  Re: Datenbanken einbinden - OHNE Migration und Seeding

Hallo Manchotix und vielen Dank für deine schnelle Antwort.

Natürlich kann ich - zu Testzwecken - einen Dump der produktiven Datenbank ziehen. Das ist aber nicht der Kern der Frage. Mir ging es darum, ob rake bei IRGENDEINEM Arbeitsschritt (insbesondere beim precompiling) ungewollt irgendwelche Schritte (drop, create, seed, Schema-Veränderung) im Vorder- oder Hintergrund durchführt und wie ich diese ggf. unterdrücken kann. Wie gesagt: ich bekomme die Füße abgehackt, wenn irgendetwas die produktive Datenbank vermurkst, an welcher unser LVS dran hängt. Das muss also absolut ausgeschlossen sein.

Autor:  slowjack2k [ 08 Mär 2016, 20:32 ]
Betreff des Beitrags:  Re: Datenbanken einbinden - OHNE Migration und Seeding

1.) Manchotix hat Recht. Wenn du auf Nummer sicher gehen willst, dann leg extra für Rails einen readonly user an, dann kann einfach nichts passieren.

2.) Du brauchst zumindest Schreibrechte auf die Tabelle schema_migrations. Rails checked mit Hilfe dieser Tabelle, ob alle Migrations auf dem aktuellen Stand sind. Es gibt zwar den Parameter


config.active_record.migration_error = false
aber ich kann dir nicht sagen, wie gut dieser Paramter ist.

3.) Wenn du keine Migration anlegest und die seeds.rb keinen Inhalt hat, dann macht Rails auch nix auser die versions weiter schreiben. Wenn du rake db:drop aufrufst, dann macht rails natürlich den Drop, wenn der DB-USer das Recht dazu hat.

4.) Vor einer Fehlbedienung bist du nie geschützt. Wenn jemand


RAILS_ENV=production rake db:drop
aufruft, dann hast du halt Pech. Kein Rake-Task wird automatisch aufgerufen. Es sei denn du rufst von Hand einen Rake-Task auf, der Abhängigkeiten zu einem anderen Rake Task hat. Ein beispiel dafür wäre


rake spec
. Dieser Dropped die Test DB und erzeugt diese neu. So lange du aber nicht explizit RAILS_ENV=prodcution setzt, ist alles OK. Es sei denn du bist so riskofreudig und konfigurierst deine Production-DB als -test oder dev-DB.

5.) Es gibt kein automatisches Deployment. Das deployment muss du selbst programmieren. Damit hast du es ganz allein in der Hand, welche rake Tasks ausgeführt werden. Viele nehmen Capistrano für das deployment. Capistrano hat einige automatismen. Da musst du schauen, was so alles beim deployment via Cap. ausgeführt wird.

An sonsten schreibt Rails nur bei update, create, touch usw. etwas in der DB.

Ein kleiner Hinweis, wenn deine DB nicht die Rails-Conventions in Bezug auf Spalten und Table-Bezeichnungen
einhält (in einem größeren Umfang, die Wahrscheinlichkeit dafür ist groß), dann würde ich auf den Einsatz von Rails verzichten.

Wenn man gegen die Rails-Conventions/ActiveRecord-Conventions arbeiten muss, dann ist das nicht nur ein pain in the ass, das kann dir dann sehr schnell beim nächsten Rails-Update auch um die Ohren fliegen.

Wenn du trotzdem mit einem legacy Schema arbeiten willst, dann ist eine hohe Test-Abdeckung das A und O.
Desweiteren muss man darfauf gefasst sein, dass mit jedemRails-Update eine große Menge Arbeit anstehen
kann.

Autor:  AxelRHD [ 08 Mär 2016, 21:08 ]
Betreff des Beitrags:  Re: Datenbanken einbinden - OHNE Migration und Seeding

Vielen Dank für die Ausführungen. Jetzt sehe ich schon deutlich klarer. Das mit dem eigenständigen User ist schon mal ein guter Anfang. Informationen aus dieser Datenbank sollen ausschließlich abgerufen und angezeigt werden. Kein CRUD im eigentlichen Sinne. Aber so wie ich es jetzt heraus höre, sollte ich den Einsatz von Rails grundsätzlich nochmals überdenken. Ich war es von der AngularsJS / Node.JS (REST) Schiene aber einfach leid, mit der eigenen API im Prinzip alles doppelt programmieren zu müssen. Vielleicht kommt mir ja noch eine bessere Idee.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/