【发布时间】:2011-08-13 12:07:08
【问题描述】:
我想将图像保存为 base64 字符串作为 Rails 中模型的一部分。
有人对迁移文件有什么建议吗?
我假设简单地设置一种 String 类型是不合适的,因为字符串的大小通常很大,例如> 2MB。
【问题讨论】:
标签: ruby-on-rails postgresql migration base64
我想将图像保存为 base64 字符串作为 Rails 中模型的一部分。
有人对迁移文件有什么建议吗?
我假设简单地设置一种 String 类型是不合适的,因为字符串的大小通常很大,例如> 2MB。
【问题讨论】:
标签: ruby-on-rails postgresql migration base64
如果您想克服大小限制,可以在迁移中使用 text 或 binary 代替 string。
API 文档给出了这个例子:
td.column(:picture, :binary, :limit => 2.megabytes)
# => picture BLOB(2097152)
TEXT 或 BLOB(二进制)列的最大大小取决于您的 RDBMS(例如 MySQL、PostgreSQL)、可用内存和某些配置设置。例如,在 MySQL 中,您应该查看 max_allowed_packet 选项,您可以将其设置为最大 1 GB 的任何值。
关于回形针的存储:
Paperclip 不允许开箱即用的数据库存储,因此您必须为此编写一些自定义代码。谷歌给了我这个:
虽然它已经过时了,所以我不确定它是否有帮助。
更重要的是:
请注意,通常不建议将文件存储在数据库中,这就是 Paperclip 不支持它的原因。这是一个坏主意的一些原因:
当图像存储在数据库中时,每个图像请求都需要调用 Rails 应用和数据库,这对性能有大量负面影响。如果您将图像存储为文件或存储在 Amazon S3 上,您的应用会更好地扩展。
您的数据库很快就会变大,这使得备份数据变得更加困难。
由于不同的 RDBMS 对列大小、列类型等有不同的规则,将大列迁移到不同的数据库(例如从 MySQL 到 PostgreSQL)可能会遇到困难。
所以我希望你有充分的理由这样做。
【讨论】: