Pergunta

Eu estou usando o gem rmagick para gerar imagens dinâmicas de um controlador. O controlador tem um id como um parâmetro, faz um olhar-se em um modelo, escreve texto sobre uma imagem existente, e saídas de TI.

Eu tenho que correr alguns benchmarks comparando gerá-la para cada pedido contra gravação no disco e usando send_data para a saída-lo se ele já existe. Eu não notei muita diferença em solicitações / segundo entre estes dois métodos.

Existe uma prática recomendada para armazenar em cache a imagem ou gravação em disco em vez de gerar dinamicamente para cada pedido? Uma vez gerado, estas imagens permaneceria na maior parte estática, mas eu também gostaria que a opção de re gerar-lo depois de um certo intervalo de tempo.

Foi útil?

Solução

A melhor prática é imagens de cache gerado e permitir que o servidor web para atendê-los.

Use um servidor web como o Apache ou Nginx na frente de sua aplicação Rails, e certifique-se de gravar a imagem para um local onde o servidor pode servi-lo. Portanto, se seus Rails rota avaliada como /dynamic_images/3.png (que chama dynamic_images_controller show ação com id = 3 e format = png), gravação essa imagem para public/dynamic_images/3.png e uso send_file no controlador de enviá-lo.

A próxima vez que arquivo é solicitado (/dynamic_images/3.png), o servidor terá prazer em servi-lo (em cache) eo app Rails nunca vai ter sucesso.

Para as necessidades avançadas, como re-gerar as imagens, e limpar o código do controlador, ter um olhar para o clipe gem .

Outras dicas

Apenas uma idéia (nunca tentou):? Por que não armazenar imagens (especialmente os que são gerados dinamicamente) com memache

Rails.cache.write ( "my_image", imagem)

Você deve colocar imagens em tal diretório em cache a partir de onde serão servidos pelo servidor web. Você não quer usar send_data para isso - que é muito lento. Além disso, você provavelmente vai querer ignorar esse diretório em seu VCS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top