【问题标题】:Update DB schema without using migrations in rails在不使用 rails 迁移的情况下更新数据库模式
【发布时间】:2012-08-08 14:29:51
【问题描述】:

我正在寻找一个自动更新架构的命令,而无需编写迁移文件。

例如,当我启动一个 Java Hibernate 应用程序时,通过一些配置,数据库架构会自动构建和更新。

【问题讨论】:

    标签: ruby-on-rails ruby database schema rake


    【解决方案1】:

    据我所知,这对于 ActiveRecord 是不可能的,但如果您不介意更改 ORM,您可以查看 DataMapper

    使用 DM,您可以在模型代码本身中定义模型的“属性”(属性),然后您可以简单地运行 rake db:automigrate 来更新数据库的架构,例如

    class Blog
      property :title,    String
      property :body,     Text
      property :user_id,  Integer, :required => true
    end
    

    【讨论】:

      【解决方案2】:

      Sequel 你可以

      一个示例(使用 sqlite,但使用其他适配器相同)

      先正常启动:

      require "sequel"
      DB = Sequel.sqlite(DB_NAME)
      
      # create an items table
      DB.create_table :items do
        primary_key :id
        String :name
        Float :price
      end
      
      # [....]
      
      require "sequel"
      DB = Sequel.sqlite('test.db')
      
      # create an items table
      DB.create_table :items do
        primary_key :id
        String :name
        Float :price
      end
      

      以后可以修改表格:

      DB.add_column :items, :valid_from, Date
      

      以下修改是可能的(也许还有更多):

      • add_column
      • add_index
      • create_view
      • drop_column
      • drop_index
      • drop_table
      • drop_view
      • 重命名表
      • 重命名列
      • set_column_default
      • set_column_type

      结合rake,您可以执行以下操作:

      require "rake"
      require "sequel"
      
      task :connect do
        DB = Sequel.sqlite('test.db')
      end
      
      desc 'create an items table'
      task :create_items => :connect do
        DB.create_table :items do
          primary_key :id
          String :name
          Float :price
        end
      end
      
      task :add_dates_to_items => :connect do
        #check if items exist is missing
        DB.add_column :items, :valid_from, Date
      end
      

      备注:迁移有助于避免模式修改的错误顺序。使用迁移,您可以定义正确的顺序。实际状态已存储,您可以降级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 2010-10-18
        • 2017-02-17
        • 1970-01-01
        相关资源
        最近更新 更多