У меня есть приложение Ruby on Rails (v 4.2.0), которое развертывается в Heroku с помощью базы данных PostgresQL.Обновление столбцов в генерации героику vs local
У меня есть ряд объектов в моей БД, что я заселяю с моим файлом seeds.rb:
Item.create([
{name: "Kale", type: "veggie"},
{name: "Apple", type: "fruit"},
{name: "MF Kombucha", type: "drink"},
{name: "Cider", type: "drink"},
{name: "Carrot", type: "veggie"}
])
Мне нужно, чтобы добавить столбец к моей items
таблице, :price
:
rails g migration AddPriceToItems
class AddPriceToItems < ActiveRecord::Migration
def change
add_column :items, :price, :integer
end
end
Я тогда обновить семена файл:
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}
])
Локально, это совершенно нормально. Синхронизировать эти новые данные с другими данными в файле семян:
rake db:drop
rake db:create
rake db:migrate
rake db:seed
Однако, в производстве, база данных теперь введенные пользователем данные. Отбрасывание базы данных означает снижение данных пользователя.
Есть ли способ синхронизировать новый файл семян с производственной базой данных, не отбрасывая базу данных? В идеале это было бы более эффективно, чем heroku run rails c
и вручную редактировало всю информацию на моей консоли.
Вам необходимо переписать файл семян, чтобы он мог работать с существующими данными. Нет волшебного способа сделать это. – meagar
Выполнение 'heroku rake db: migrate' обновит вашу схему новым столбцом цены в таблице элементов. Он не должен влиять на таблицу пользователей, если нет какой-либо связи между ценами и пользователями, которых вы не упомянули. – heyitsjhu
, кстати, вы можете попробовать что-то подобное в разработке, добавив столбец в таблицу, выполнив только «rake db: migrate», чтобы обновить схему, а затем подтвердите, что создаваемые вами пользователи все еще находятся в разработке. – heyitsjhu