微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 …上定义用户类,迁移将会引发异常,这是一个很大的痛苦.

原文地址:https://www.jb51.cc/ruby/266268.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐