在Rails中缓存动态图像

Tre*_*vor 4 caching ruby-on-rails rmagick

我正在使用rmagick gem从控制器生成动态图像.控制器将id作为参数,查看模型,在现有图像上写入文本,然后输出.

我已经运行了一些基准测试,比较为每个请求生成它与写入磁盘并使用send_data它来输出(如果它已经存在).我没有注意到这两种方法之间的请求/秒差异很大.

是否有最佳实践来缓存图像或将其写入磁盘而不是为每个请求动态生成图像?一旦生成,这些图像将保持大部分静态,但我也希望在一定时间间隔后重新生成它.

Jon*_*ian 5

最佳做法是缓存生成的图像并允许Web服务器为它们提供服务.

在Rails应用程序前使用Apache或Nginx等Web服务器,并确保将映像写入Web服务器可以为其提供的位置.所以,如果你的Rails路线计算为/dynamic_images/3.png(其中呼吁dynamic_images_controller采取行动show与ID = 3和格式= PNG),编写成图像public/dynamic_images/3.png,并使用send_file控制器来发送.

下次请求该文件时(/dynamic_images/3.png),Web服务器很乐意为它提供服务(缓存),Rails应用程序永远不会受到攻击.

对于高级需求,例如重新生成图像,以及清理控制器代码,请查看回形针 gem.