【问题标题】:Rails: Is there any way to load database information during initialization?Rails:有没有办法在初始化期间加载数据库信息?
【发布时间】:2018-03-23 07:49:09
【问题描述】:

我有一些很少更改的表。不幸的是,我需要在控制器中经常调用这些表,这会增加某些页面的加载时间。例如,在一个控制器中,我有:

class PagesController < ApplicationController
    def index
        @groups = Group.all
        @events = Event.all
    end
end

然后我突然想到,由于组和事件很少改变,我可以将这些变量加载到初始化程序中或作为模型中的常量,这样它们现在实际上不需要查询数据库。我将上面的内容更改为以下内容:

class Group < ApplicationRecord
    ALL = Group.all
end
class Event < ApplicationRecord
    ALL = Event.all
end

class PagesController
    def index
        @groups = Group::ALL
        @events = Event::ALL
   end
end

上述解决方案实际上在开发中有效。然而,在 Heroku 的生产环境中,它会将变量加载到控制器中。我还尝试设置一个初始化程序并定义::Groups = Group.all,但这仍然会在控制器中调用时加载数据。有什么方法可以在初始化期间以适用于 Heroku 的方式加载数据库信息?

【问题讨论】:

    标签: ruby-on-rails ruby heroku activerecord ruby-on-rails-5


    【解决方案1】:

    很遗憾,您没有指定表格的大小。 如果它们的大小适中,我会使用 Rails.cache 代替在控制器中获取的记忆。

    您可以在此处阅读更多详细信息:

    https://devcenter.heroku.com/articles/caching-strategies#low-level-caching

    顺便说一下,数据应该被存储为类变量而不是实例变量(我也会存储Foo.all.to_a - 所以是数组而不是AR关系)。
    虽然我不建议这样做,因为我不确定 Heroku 多久可以重新加载应用程序。 此外,它肯定是一个 hack,Rails.cache 确实是实现这种缓存的更可取的方式。此外,它还提供了一种无效的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 2014-11-28
      • 2021-06-09
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多