2

我可以断言轨/西纳特拉应用程序初始化只有一次,所有请求共享同一个应用程序 实例期间坚持自定义类实例?或做新的请求产生新的应用程序实例?西纳特拉/ Rails的:应用程序生命周期

是否可以在应用程序生命周期中实例化自定义类并保留它们而不使用会话,数据库存储或第三方服务?如果是这样,从线程安全的角度来看有什么影响?

我在想如何实现一个基于web的下载管理器,我目前正在评估基于ruby的框架。

回答

2

我可以断言轨/西纳特拉应用程序是 初始化只有一次, 共享相同的应用程序实例的所有要求?或者做新的 请求产生新的应用程序实例?

一般不。这真的取决于你的设置。如果您只使用重复使用相同应用程序对象的服务器(又称机架处理程序)运行进程,则这将起作用。是否使用相同的应用程序实例取决于您使用的Web框架。例如,Sinatra会为每个请求创建应用程序类的新实例(通常为Sinatra::Application),作为Rack端点使用。

是否有可能例如定制 类和应用 一生中坚持完全不使用会话, 数据库储存或第三方 服务?如果是这样,从线程安全性 的角度来看, 意味着什么?

如果你真的想坚持班级,你可能需要像磁悬浮列车。不过,我相信你的意思是坚持自定义类的实例。如果你不想使用数据库进行持久化(你真的应该这样做),那么你可以回到随Ruby提供的PStore。

+0

这是关于Sinatra的相当震撼的信息。我正在寻找关于如何让Sinatra不会在每次请求时都打开新数据库连接的信息。 Sinatra是否是错误的路? – mjnissim 2012-06-08 19:30:08

+0

为什么会这么令人震惊? Rails也为每个请求创建一个新的控制器实例。不要将数据库连接存储为实例变量。例如,您可以执行'set:db,DB.connect(...)',然后以路径中的settings.db的形式访问它。 – 2012-06-19 16:43:01