如何使我的Rails变量可供整个应用程序访问?

时间:2011-08-06 05:09:26

标签: ruby-on-rails-3 session rubygems gmail

我正在使用Gmail Gem。每次我从gmail请求数据时,我都不想运行Gmail.connect。我想将连接存储到变量中,以便我可以在任何地方访问它。

首次尝试,我将其存储到全局变量 @gmail_session 中,但在我尝试使用远程调用获取变量后,我无法访问该变量。

第二次尝试,我将连接保存到会话变量 session [:gmail] 。我认为这将是解决方案,但我收到此错误消息:没有为类Thread定义marshal_dump

请帮我存储我的Gmail连接:)

谢谢!

1 个答案:

答案 0 :(得分:0)

Rails newb在这里,所以可能有一个更好的方法,但这里是我的20 ...

使用application_controller创建一个方法,在其中加载@gmail_session对象,这是一个实例var,可供所有控制器/视图使用。

例如

def get_using_remote_call

  @gmail_session = //do some stuff

end

然后你可以继续在application_controller中添加一个after_filter,每次加载任何控制器时都会调用该函数,因为在他们第一次加载生产后它们被缓存,这应该不会造成问题,直到你的应用获得10000次访问一天......

另一种做同样事情的方法是在config / libs中包含一个模块,并在config / application.rb中将目录添加到autoload中,如下所示

config.autoload_paths += %W(#{config.root}/lib)

这会自动加载模块/类/任何内容然后你可以简单地调用函数get_using_remote_call并将其视为一个对象并将其链接起来,或者你可以

@gmail_session = get_using_remote_call 

或者只是在控制器的after_filter / before_filter中使用它:)

希望这有帮助!