【发布时间】:2017-12-19 12:21:32
【问题描述】:
我只有一个控制器和一些动作来处理与 IMAP 相关的不同功能。所以我的问题是我不想为每个操作创建一个单独的连接。例如在一个动作中,我可以做类似的事情(它不是实际的代码):
def index
@imap = Net::IMAP.new(server, 993, true)
@imap.login(user, password)
@imap.select("INBOX")
end
再次在同一控制器内的另一个操作中,如果我需要执行与 IMAP 相关的操作,那么我将不得不再次创建 @imap 变量。
我是第一次使用 IMAP,因此根据我的理解 new 方法在每个操作中都会创建另一个到服务器的连接,我听说谷歌对 IMAP 连接的数量有连接限制 (15)。
我无法序列化此连接对象或将其存储在 Redis 或 Memcached 等任何其他服务中或缓存它,那么我如何创建一次此连接并使用它所有其他操作,如果可能的话,至少在同一控制器内执行操作?如果不可能,还有其他解决方案来解决这个问题吗?
当然我可以从邮箱缓存我需要的数据,但这无济于事,因为还有一些其他操作不需要数据,它需要在邮箱中执行一些操作,例如删除邮件,因此需要连接实例。
【问题讨论】:
-
是否要存储请求之间的连接?或者您只是想通过控制器中的任何操作打开新连接?
标签: ruby-on-rails ruby imap