从Rails中迁移到模式获取二进制限制

时间:2016-04-13 20:23:16

标签: mysql ruby-on-rails ruby-on-rails-4 mariadb rails-migrations

我有一个带有二进制字段的模型的迁移,用于存储一个大于10Mb的文件:

class CreateNewModel < ActiveRecord::Migration
  def change
    create_table :new_model do |t|
      ...
      t.binary :data, limit: 16777216
      ...
    end
  end
end

使用限制信息,迁移可以在MySQL或MariaDB数据库中创建一个longblob对象,如How do you get Rails to use the LONGBLOB column in mysql?中所示。

迁移似乎在MariaDB数据库上正常工作:数据具有longblob类型。但是直接从模式加载会为数据提供blob类型而不是longblob,这意味着rake db:setup命令不再可用,因为模式不能反映我想要的数据库。

当看到db/schema.rb文件时,这似乎非常明显:

create_table "new_model", force: :cascade do |t|
  ...
  t.binary   "data"
  ...
  t.datetime "created_at",        null: false
  t.datetime "updated_at",        null: false
end

没有限制信息,因此加载模式只能导致blob而不是longblobs。

为什么限制信息不会写入架构中?

我不想手动更改架构,因为它意味着必须在每次迁移时重做更改(因为它们会重新生成架构文件)。我有什么其他解决方案,有没有办法强制限制字段从迁移到模式?

我尝试使用https://github.com/rails/rails/pull/21688中描述的缩写,但它似乎不存在于Rails 4.2.6中。

0 个答案:

没有答案