Desenvolvo no iOS e estou mudando de um back-end PHP para Ruby on Rails. O formato de intercâmbio é JSON .
Uma rápida pesquisa no Google por 'salvar imagens no Rails' tem quase todos os resultados relacionados a salvar dados de imagem como blobs no banco de dados. Posso estar enganado, mas tenho a impressão de que salvar dados de imagem em um banco de dados é um enorme desperdício de tempo e espaço (em vez de salvar um link no local do arquivo ('/img/subcat/4656.png') .
No PHP, é bastante padrão receber os dados, gerar um nome de arquivo, salvar esse arquivo no disco e atualizar o banco de dados com a localização da imagem no disco. É o mesmo para Ruby on Rails, ou há alguma funcionalidade de imagem ActiveRecord interna que eu não conheço?
ruby-on-rails
persistence
image
do utilizador
fonte
fonte
Respostas:
O que eu fiz no passado foi usar o PaperClip com o Amazon S3 e o CloudFront CDN para uma entrega mais rápida. O PaperClip suporta muito bem o armazenamento S3: consulte a documentação para obter as opções de configuração de armazenamento S3 .
s3_host_alias: assets.example.com
. Isso fará com que os URLs gerados salvem os recursos de imagem para usar o host de distribuição do CloudFront.config.action_controller.asset_host = http://assets.example.com
. Os URLs de ativos do Ruby on Rails também usarão sua distribuição do CloudFront, para armazenamento em cache / entrega mais rápida.Isso é bastante superficial, mas espero que você aponte na direção de alguns recursos úteis. Obviamente, essa é apenas uma solução, mas que funcionou para mim em uma situação em que eu estava lidando com centenas de milhares de anexos de imagens no banco de dados.
(Como uma possível etapa avançada que pode não ser necessário ou útil para o seu caso, você também pode configurar vários CNAMEs para a sua distribuição CloudFront, tais como
assets0.example.com
eassets1.example.com
. Ambos clipes3_host_alias
eaction_controller.asset_host
pode então tomar lambdas que lhe permitirá deterministically (com base na ativo) gerar URLs que usam hosts diferentes, para melhor paralelização se você estiver baixando vários na mesma página, pois os navegadores limitarão o máximo de conexões simultâneas ao mesmo host.)fonte
Eu tentei várias gemas, mas agora estou usando o FineUploader junto com o PaperClip
O FineUploader lida com grande parte da GUI para você, por exemplo, progresso do upload, arrastar e soltar e vários uploads de arquivos, e assim por diante. Estou usando o PaperClip porque quero armazenar as imagens nos meus servidores em vez de no S3.
O que normalmente fazemos é procurar uma solução configurável pronta para uso estável em vez de recriar coisas do zero. Com o PaperClip, armazeno as imagens e, com um StateMachine, faço conversões nas imagens e as coloco em uma categoria com base no nome do arquivo. Eu tinha a mesma pergunta que você, e essa era minha melhor solução de trabalho, é por isso que a compartilho.
fonte