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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails:对生产数据库进行更改的最佳方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要对使用中的生产数据库进行更改.只需添加几列.我已经通过迁移对dev数据库进行了更改.什么是更新生产数据库,同时保留现有数据并且不会中断操作太多的最佳方法

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

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

解决方法@H_301_8@
这听起来像是处于生产数据库架构不完全匹配您在开发中使用的状态(尽管不完全清楚).我会在沙滩上画一条线,并使得这个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 …上定义用户类,迁移将会引发异常,这是一个很大的痛苦.

猜你在找的Ruby相关文章