代码之家  ›  专栏  ›  技术社区  ›  Trevor

在Rails中缓存动态图像

  •  4
  • Trevor  · 技术社区  · 15 年前

    我使用rmagic gem从控制器生成动态图像。控制器将ID作为参数,查找模型,在现有图像上写入文本,然后输出它。

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

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

    3 回复  |  直到 13 年前
        1
  •  5
  •   Jonathan Julian    15 年前

    最佳实践是缓存生成的图像,并允许Web服务器为其提供服务。

    在Rails应用程序前面使用Apache或nginx等Web服务器,并确保将图像写入Web服务器可以为其提供服务的位置。因此,如果您的铁路路线评估为 /dynamic_images/3.png (哪些电话 dynamic_images_controller 行动 show 当id=3且format=png时,将该图像写入 public/dynamic_images/3.png 使用 send_file 在控制器中发送它。

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

    对于高级需求,如重新生成图像和清除控制器代码,请查看 paperclip 宝石。

        2
  •  2
  •   Philipp Bolliger    13 年前

    只是一个想法(从未尝试过):为什么不用memache存储图像(尤其是动态生成的图像)?

    rails.cache.write(“我的图像”,图像)

        3
  •  1
  •   alex.zherdev    15 年前

    您应该将缓存的图像放在这样一个目录中,Web服务器将在该目录中为它们提供服务。您不想为此使用发送数据-这太慢了。 另外,您可能希望忽略VCS中的那个目录。