[RUBY] Informationen zu Tabellenänderungen und zum Zurücksetzen der Datenbank nach der Bereitstellung

Einführung

Wir haben das erste Team in der Programmierschule entwickelt, die wir besuchen. Ich wollte das Datenbankdesign gründlich prüfen, möchte aber die Spalten ändern und die Datenbank der Produktionsumgebung während der Entwicklung zurücksetzen! !! Ich musste über etwas nachdenken. Daher werde ich ein Protokoll als mein Memorandum führen. Darüber hinaus denke ich, dass das Zurücksetzen der Datenbank nach der Bereitstellung nicht durchgeführt werden sollte. Für diejenigen, die darauf verweisen, denken Sie bitte daran, dass der Artikel von einem Programmieranfänger geschrieben wurde.

Entwicklungsumgebung

AWS EC2 Automatische Bereitstellung durch Capistrano Capistrano Version: 3.14.0 (Rake Version: 13.0.1) Rails 5.2.4.3 ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19] mysql Ver 14.14 Distrib 5.6.47, for osx10.15 (x86_64) using EditLine wrapper

Artikel, die ich als Referenz verwendet habe

[Rails] Eine Sammlung von Befehlen, die häufig in der Bereitstellung von Produktionsumgebungen verwendet werden! Verwenden von AWS / unicorn / nginx / Capistrano @ 15grmr Ruby on Rails-Spalten hinzufügen / entfernen @azusanakano [Rails] So ändern Sie den Spaltendatentyp @yana_dev

Was soll ich von nun an schreiben?

Ändern Sie den Tabellendatentyp und löschen / fügen Sie Spalten hinzu

Grundsätzlich entspricht dies dem Hinzufügen einer Migrationsdatei. Ich habe die Methode verwendet, die Migrationsdatei zurückzusetzen, neu zu schreiben und in der lokalen Umgebung erneut zu migrieren, aber dies scheint nicht sehr gut zu sein. Da die Migrationsdatei einen Aspekt des Tabellenänderungsverlaufs zu haben scheint, scheint das Umschreiben zu bedeuten, dass der Verlauf gefälscht ist. Wenn Sie in der Teamentwicklung die Migrationsbeschreibung ohne Erlaubnis neu schreiben, ... ① Nicht in den Zweigen anderer Mitglieder enthalten (2) Probleme wie das Zurücksetzen der Zielmigrationsdatei, bevor andere Mitglieder die Zweige zusammenführen (in diesem Fall kann der Datensatz der lokalen Datenbank des Teammitglieds gelöscht werden) treten ebenfalls auf. Ich werde.

Erstellen Sie daher eine Migrationsdatei für Spaltenänderungen, um diese zu verarbeiten.

Ich möchte den Datentyp CASE1 ändern

Dieses Mal nehme ich ein Beispiel für die Änderungen, die ich tatsächlich vorgenommen habe. Manchmal wollte ich den Datentyp der Präfixspalte in der Adresstabelle von "string" in "integer" ändern. Erstellen Sie eine Migrationsdatei mit der folgenden Beschreibung.

Terminal


$ rails g migration change_data_preficture_to_adresses

Beschreiben Sie in der generierten Migrationsdatei.

db/migrate/*****_change_data_preficture_to_addresses.rb


class ChangeDataPrefictureToAddresses < ActiveRecord::Migration[5.2]
  def change
    change_column :addresses, :preficture, :integer
  end
end

Bei der automatischen Bereitstellung durch Capistrano wird die Migration anscheinend jedes Mal durchgeführt, wenn die automatische Bereitstellung durchgeführt wird, sodass Sie den Datentyp der Spalte in der Produktionsumgebung ändern können.

Ich möchte eine CASE2-Spalte löschen und hinzufügen

Dies entspricht auch dem Generieren einer Migrationsdatei. Es werden zwei Dateien verwendet, eine zum Löschen von Spalten und die andere zum Hinzufügen von Spalten. In meinem Beispiel wurde die Benutzer-ID in der Kartentabelle mit einer normalen Spalte vom Typ "Ganzzahl" anstelle eines externen Schlüssels erstellt.

Löschen Sie zunächst die Spalte user_id.

Terminal


$ rails g migration remove_user_id_from_cards

Beschreiben Sie in der generierten Migrationsdatei.

db/migrate/*****_remove_user_id_from_cards.rb


class RemoveUserIdFromCards < ActiveRecord::Migration[5.2]
  def change
    remove_column :cards, :user_id, :integer
  end
end

Generieren Sie als Nächstes eine Migrationsdatei zum Hinzufügen von Spalten. Diesmal handelt es sich um eine externe Schlüsselspalte, daher unterscheidet sich die Beschreibung geringfügig.

Terminal


$ rails g migration add_user_ref_to_cards

ref bezieht sich auf den Referenztyp des externen Schlüssels.

python


class AddUserRefToCards < ActiveRecord::Migration[5.2]
  def change
    add_reference :cards, :user, foreign_key: true
  end
end

Sie können Spalten auch entfernen und hinzufügen, indem Sie sie automatisch mit Capistrano bereitstellen.

Ich möchte die Datenbank in der Produktionsumgebung zurücksetzen

Während der Entwicklung möchten Sie möglicherweise die Datenbank für die Produktionsumgebung zurücksetzen. Ich hatte kein Konto für die Produktionsumgebung und konnte mich nicht anmelden. Daher konnte ich das zuvor registrierte Produkt (fehlerhafter Bildlink) usw. nicht löschen.

Also habe ich die Datenbank in der Produktionsumgebung zurückgesetzt.

Terminal


$ bundle exec cap production deploy

Beenden wir die automatische Bereitstellung durch Capistrano einmal. Melden Sie sich dann bei AWS an.

Terminal


$ ssh -i ~/.ssh/*******.pem [email protected]

Geben Sie den Namen der PEM-Datei in "******" und die elastische IP in "XX.XXX.XXX.XX" ein. Gehen Sie dann zu "aktuell".

Terminal


$ cd  /var/www/Anwendungsname/current

Wenn Sie auf "aktuell" zugreifen können, können Sie von hier aus den Datenbankbetrieb starten. Löschen Sie zuerst die Datenbank.

Terminal


$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

Da die Datenbank für die Produktionsumgebung nicht mehr vorhanden ist, werde ich die Datenbank erneut erstellen.

Terminal


$ rake db:create RAILS_ENV=production

Führen Sie die Migration durch.

Terminal


$ rake db:migrate RAILS_ENV=production

Wenn es eine Seeds-Datei gibt, laden Sie sie.

Terminal


$ rake db:seed RAILS_ENV=production

Damit ist das vollständige Zurücksetzen der Datenbank abgeschlossen. Vergessen Sie nicht, sich von AWS abzumelden.

Terminal


$ exit

Recommended Posts

Informationen zu Tabellenänderungen und zum Zurücksetzen der Datenbank nach der Bereitstellung
Ein Memorandum über Tabellendatentypen und -befehle (Rails)