gpt4 book ai didi

ruby-on-rails - rails : Best way to make changes to a production database

转载 作者:行者123 更新时间:2023-12-04 02:47:25 25 4
gpt4 key购买 nike

我需要对正在使用的生产数据库进行更改。只需添加几列。我已经通过迁移对开发数据库进行了更改。更新生产数据库同时保留现有数据且不会过多中断操作的最佳方法是什么?

它是 MYSQL,我还需要将数据添加到列以及现有记录。一列可以有一个默认值(它是 bool 值),但另一列是一个时间戳,应该有一个任意的回溯值。行数并不大。

因此,如果我使用迁移,我如何添加数据以及如何让它只执行两个(或三个 - 我在生产数据库上添加数据 - 最新的迁移,当它最初不是通过迁移构建时(我相信他们使用了模式代替)?

最佳答案

听起来您处于生产数据库架构与您在开发中使用的架构不完全匹配的状态(尽管并不完全清楚)。我会在沙子上画一条线,让 prod db 处于更好的状态。本质上,您想要做的是确保 prod db 有一个“schema_info”表,该表列出了您>不想<在生产中运行的任何迁移。然后您可以将迁移添加到您的心脏内容中,它们将针对生产数据库工作。

完成后,您可以编写添加架构更改或添加数据的迁移,但是您需要非常小心的一件事是,如果您使用迁移添加数据,则必须在迁移本身中定义模型,如下所示:

class AddSomeColumnsToUserTable < ActiveRecord::Migration
class User < ActiveRecord::Base; end
def self.up
add_column :users, :super_cool, :boolean, :default => :false
u = User.find_by_login('cameron')
u.super_cool = true
u.save
end

def self.down
remove_column :users, :super_cool
end
end

这样做的原因是将来,您可能会在某些重构或其他过程中完全删除模型。如果您没有在“User.find_by_login...”行定义用户类,迁移将抛出异常,这是一个很大的痛苦。

关于ruby-on-rails - rails : Best way to make changes to a production database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com