Ich habe eine Ruby on Rails (v 4.2.0) App, die Heroku mit einer PostgresQL-Datenbank bereitgestellt wird.Aktualisieren von Spalten in Heroku-Produktion im Vergleich zu lokalen
Ich habe eine Reihe von Objekten in meinem db, die ich mit meiner seeds.rb Datei zu füllen:
Item.create([
{name: "Kale", type: "veggie"},
{name: "Apple", type: "fruit"},
{name: "MF Kombucha", type: "drink"},
{name: "Cider", type: "drink"},
{name: "Carrot", type: "veggie"}
])
Ich brauche eine Spalte meiner items
Tabelle hinzuzufügen, :price
:
rails g migration AddPriceToItems
class AddPriceToItems < ActiveRecord::Migration
def change
add_column :items, :price, :integer
end
end
ich dann meine Samen-Datei aktualisieren:
Item.create([
{name: "Kale", type: "veggie", price: 2},
{name: "Apple", type: "fruit", price: 1},
{name: "MF Kombucha", type: "drink", price: 10000},
{name: "Cider", type: "drink", price: 2},
{name: "Carrot", type: "veggie", price: 1}
])
Lokal ist das völlig in Ordnung. Ich synchronisieren diese neuen Daten mit anderen Daten in der Samen-Datei:
rake db:drop
rake db:create
rake db:migrate
rake db:seed
jedoch in der Produktion, jetzt die Datenbank hat Benutzerdaten eingegeben. Das Löschen der Datenbank würde das Löschen der Benutzerdaten bedeuten.
Gibt es eine Möglichkeit, die neue Seeds-Datei mit der Produktionsdatenbank zu synchronisieren, ohne die Datenbank löschen zu müssen? Im Idealfall wäre dies effizienter als heroku run rails c
und manuelle Bearbeitung aller Informationen in meiner Konsole.
Sie müssen Ihre Seeds-Datei neu schreiben, so dass sie gegen vorhandene Daten laufen kann. Es gibt keinen magischen Weg, dies zu tun. – meagar
läuft 'heroku rake db: migrate' aktualisiert Ihr Schema mit der neuen Preisspalte in der Items-Tabelle. Es sollte die Benutzertabelle nicht beeinflussen, es sei denn, es gibt eine Art von Assoziation zwischen Preisen und Benutzern, die Sie nicht erwähnt haben. – heyitsjhu
Übrigens können Sie etwas Ähnliches in der Entwicklung ausprobieren, indem Sie einer Tabelle eine Spalte hinzufügen, die nur 'rake db: migrate 'ausführt, um das Schema zu aktualisieren, und dann bestätigen, dass die von Ihnen erstellten Benutzer noch in der Entwicklung sind. – heyitsjhu