我有一个带有二进制字段的模型的迁移,用于存储一个大于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中。