G'day伙计们,
目前有一点愚蠢的难题。我和一些伙伴已经构建了一个非常棒的ruby CLI脚本来解析和管理数据。它使用宝石,响应请求,功能齐全,功能强大。
我想知道是否有任何方法可以保存此类的单例实例并通过内置rails的Web界面与其进行交互。我有相当数量的rails体验,但不能为我的生活中的数字如何在web-app中创建单例实例以及如何使所有类/控制器普遍可访问。
我需要创建一个单例的原因是我需要加载一堆数据,这个小脚本会切换和更改。它是基于类的,但我不想将这些类移植到使用activerecord,如果我没有,因为它将所有内容保存在内存中(并且它不占用那么多内存)。
有没有什么方法可以导入脚本,使用必需的命令启动它,然后在Web应用程序的生命周期内将该对象保存在内存中,或者我是否必须将类/方法移植到AR或控制器方法?
干杯
答案 0 :(得分:1)
您可以为对象添加包含Singleton包装器的初始化程序:
<强>配置/初始化/ foo_factory.rb:强>
require 'foo'
class FooFactory
class << self
def foo
@@foo ||= Foo.new(lots, of, params)
end
end
end
现在可以使用其他任何地方:
FooFactory.foo.do_something
请注意,这是非常可怕的,你可能不应该这样做。但是,它会执行您想要的操作:建立仅在服务器启动时设置的全局单例。
更加类似可怕的黑客攻击只是将你的单个Foo实例分配给一个常量:
<强>配置/初始化/ foo_singleton.rb:强>
require 'foo'
FooSingleton = Foo.new(lots, of, params)
在其他地方,您可以使用:
FooSingleton.do_something
请注意,这基本上只比全局变量略好,因为你不能(轻松)改变FooSingleton的值。