ruby-on-rails – Rails:对生产数据库进行更改的最佳方式

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

这是MysqL,我也需要将数据添加到列中以及已有的记录.一列可以有一个认值(它是布尔值),另一列是一个时间戳,应该有任意的后缀值.行数不是很大.

所以如果我使用迁移,我如何添加数据,我该如何做到这两个(或三 – 我添加数据-latest迁移在生产db当它最初没有通过迁移构建(我相信他们使用架构)?

解决方法

这听起来像是处于生产数据库架构不完全匹配您在开发中使用的状态(尽管不完全清楚).我会在沙滩上画一条线,并使得这个prod db处于更好的状态.基本上你想要做的是确保prod数据库一个“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 …上定义用户类,迁移将会引发异常,这是一个很大的痛苦.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...