2 Stimmen

Wie schließe ich aus, dass Daten aus lokalen Tabellen schema_migrations auf Heroku DB übertragen werden?

Ich konnte meine Ruby on Rails-Anwendung mit MySQL (local dev) auf den Heroku-Server übertragen und mein Modell mit dem folgenden Befehl migrieren heroku rake db:migrate . Ich habe auch die Dokumentation zu folgenden Themen gelesen Datenbank Import/Export . Bezieht sich dieses Dokument auf das Pushen von Daten aus meiner lokalen Entwicklungs-DB in die DB von Heroku? Muss ich etwas in der Datei ändern database.yml um sie zu verwirklichen?

Ich habe den folgenden Befehl ausgeführt:

heroku db:push

und ich erhalte die Fehlermeldung:

Sending data
2 tables, 3 records
!!! Caught Server    Exception                                   | ETA:  --:--:--
Taps Server Error: PGError ERROR:  duplicate key value violates unique constraint
"unique_schema_migrations"

Ich habe 2 Tabellen, eine erstelle ich für meine Anwendung und die andere schema_migrations . Die Gesamtzahl der Einträge in den beiden Tabellen beträgt 3. Ich drucke auch die Anzahl der Einträge in der von mir erstellten Tabelle aus, und es wird 0 angezeigt.

Haben Sie eine Idee, was ich übersehen haben könnte oder was ich falsch mache?

EDIT: Ich habe herausgefunden, die oben, Heroku's DB haben bereits schema_migrations in dem Moment, in dem ich migrate ausgeführt habe.

Neue Frage: Weiß jemand, wie ich Daten aus einer bestimmten Tabelle davon ausschließen kann, dass sie an Heroku DB übertragen werden. Die auszuschließende Tabelle ist in diesem Fall schema_migrations .

Nicht so gute Lösung : Ich habe gegoogelt, und jemand anderes hatte das gleiche Problem. Er schlug vor, den Namen des schema_migrations Tabelle zu zschema_migrations . Auf diese Weise werden die Daten aus den anderen Tabellen ordnungsgemäß übertragen, bis es bei der letzten Tabelle fehlschlägt. Es ist eine ziemlich schlechte Lösung, aber für den Moment wird es reichen.

Eine bessere Lösung wäre es, einen bestehenden Rails-Befehl zu verwenden, der eine bestimmte Tabelle aus einer Datenbank zurücksetzen kann. Ich glaube nicht, dass Rake kann das tun.

1voto

Greg Campbell Punkte 15052

Zwei mögliche Optionen:

  1. Le site heroku Edelstein und der zapft gem (das zur Synchronisierung von Datenbanken verwendet wird) sind beide quelloffen - man könnte sie forken, die taps-Client-API so ändern, dass Tabellen von einem Push ausgeschlossen werden können, und dann das heroku gem so ändern, dass es diese neue Option verwendet.

  2. Sie könnten ein Wrapper-Skript schreiben, das die pgdump um die Tabelle schema_migrations zu sichern, wird diese Tabelle gelöscht, heroku push es die Datenbank und lädt dann die Tabelle neu.

0voto

Andy Gaskell Punkte 30777

Aufgrund der Fehlermeldung, die Sie erhalten, ist dies nur eine Vermutung, aber push sieht so aus, als ob es das Schema und die Daten abgreift. Ich würde versuchen, in eine leere Datenbank zu pushen.

0voto

Thierry Lam Punkte 43346

Ich habe gerade eine Rails 3 Beta-App auf heroku auf ihrem neuen Bambus-Server bereitgestellt. Ich kann jetzt Daten von meinem lokalen Entwicklungsrechner in die heroku-Datenbank hochladen, indem ich das tue:

heroku rake db:fixtures:load test/fixtures/my_model.yml

Die Daten werden dann ordnungsgemäß in die Heroku-Datenbank übertragen. Obwohl ich eine bestimmte Datendatei angegeben habe, werden automatisch Daten aus meinen anderen yaml-Dateien übertragen. Das hat wahrscheinlich etwas mit meinen Modellbeziehungen zu tun.

0voto

Seenmyfate Punkte 1

Wenn Ihre Datenbanken nicht synchronisiert sind, können Sie die Heroku-Datenbank vor dem Pushen jederzeit zurücksetzen, indem Sie

heroku db:reset

0voto

Alextoul Punkte 829

Um aus bestimmten Tabellen zu schieben/zu ziehen

heroku db:pull --tables logs,tags

http://blog.heroku.com/archives/2010/4/21/supporting_big_data_part_1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X