Сохранение строки Base64 в Rails - PullRequest
4 голосов
/ 13 августа 2011

Я хочу сохранить изображение в виде строки base64 как часть модели в Rails.

У кого-нибудь есть рекомендации по файлу миграции?
Я предполагаю, что простая установка типа String не подходит, учитывая, что размер строки часто большой, например> 2 МБ.

1 Ответ

6 голосов
/ 13 августа 2011

Вы можете использовать text или binary вместо string в своей миграции, если хотите преодолеть ограничение размера.

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column

Документация API даетПример:

td.column(:picture, :binary, :limit => 2.megabytes)
# => picture BLOB(2097152)

Максимальный размер столбцов TEXT или BLOB (двоичный) зависит от вашей СУБД (например, MySQL, PostgreSQL), доступной памяти и определенных параметров конфигурации.Например, в MySQL вы должны взглянуть на параметр max_allowed_packet, который можно установить на любое значение до 1 ГБ.

Относительно хранилища с помощью Paperclip:

Paperclip не позволяет хранить базы данных «из коробки», поэтому для этого нужно написать собственный код.Google дает мне это:

http://patshaughnessy.net/2009/5/29/paperclip-sample-app-part-3-saving-file-attachments-in-a-database-blob-column

Это устарело, поэтому я не уверен, что это полезно.

Более важно:

Обратите внимание, что хранение файлов в базе данных, как правило, не рекомендуется, поэтому Paperclip не поддерживает его.По некоторым причинам это плохая идея:

  1. Когда изображения хранятся в БД, каждый запрос изображения требует обращения к вашему приложению Rails и к базе данных, которая имеет массив отрицательно влияет на производительность.Если вы храните изображения в виде файлов или в Amazon S3, ваше приложение будет масштабироваться намного лучше.

  2. Ваша база данных очень быстро увеличивается в размере, что затрудняет резервное копирование ваших данных.

  3. Поскольку разные СУБД имеют разные правила для размера столбцов, типов столбцов и т. Д., Перенос больших столбцов в другую базу данных (например, из MySQL в PostgreSQL) может вызвать трудности.

Так что я надеюсь, у вас есть все основания для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...