我使用的rmagick宝石用于从控制器生成的动态图像。该控制器有一个id作为PARAM,是否一个上的模型查找,在现有的图像写入的文字,并输出它。

我已经运行一些基准比较产生它为每一个请求与写入磁盘和如果它已经存在使用send_data以将其输出。我还没有发现在许多请求的差的/第二这两种方法之间。

是否有用于高速缓存该图像或将其写入磁盘,而不是动态地生成它为每个请求的最佳做法?一旦产生,这些图像将保持大多是静态的,但我也喜欢的选项一定的时间间隔后重新生成它。

有帮助吗?

解决方案

最好的做法是缓存生成的图像,并允许网络服务器来为他们服务。

使用一个Web服务器,如Apache或Nginx的在你的Rails应用程序的前面,并确保你写的图像到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应用程序将永远不会被打到。

有关高级需求,如重新生成的图像,以及清理控制器代码,看看在纸夹宝石。

其他提示

只是一个想法(没试过):为什么不图像(尤其是动态生成的那些)与memache存储

Rails.cache.write( “MY_IMAGE”,图像)

您应该把缓存图片到这样的目录从那里他们将通过网络服务器来提供服务。你不希望使用SEND_DATA这 - 这是太慢了。 此外,你可能会想忽略该目录在你的VCS。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top