Tag: 持久性

稳定/可重复的随机排序(MySQL,Rails)

我想通过随机排序的ActiveRecord模型列表(来自MySQL数据库的行)进行分页。 但是,这种随机化需要在每个会话的基础上持续存在,以便访问该网站的其他人也可以获得随机的,可分页的记录列表。 假设有足够的实体(数万个)将随机排序的ID值存储在会话或cookie中太大,所以我必须暂时以其他方式(MySQL,文件等)保留它。 最初我以为我可以根据会话ID和页面ID创建一个函数(返回该页面的对象ID),但是由于MySQL中的对象ID值不是连续的(有间隙),因此我似乎崩溃了正在戳它。 好处是它不需要/最小存储,但缺点是它实现起来可能非常复杂并且可能是CPU密集型的。 我的感觉是我应该创建一个交集表,例如: random_sorts( sort_id, created_at, user_id NULL if guest) random_sort_items( sort_id, item_id, position ) 然后只需将’sort_id’存储在会话中。 然后,我可以像往常一样对random_sorts WHERE sort_id = n ORDER BY position LIMIT …进行分页。 当然,我必须在那里放一些收割机,以便在一段时间不活动后将它们移除(基于random_sorts.created_at)。 不幸的是,我必须在创建新对象时(和/或删除旧对象,尽管删除非常罕见)使排序无效。 并且,随着负载的增加,该表的大小/性能(甚至正确索引)下降。 看起来这应该是一个解决的问题,但我找不到任何这样做的轨道插件…任何想法? 谢谢!!

如何使用MongoDB和Mongoid在Rails 3上进行适当的数据库测试(TDD)

如何通过Mongoid on Rails使用MongoDB编写适当的unit testing(以及针对该问题的集成测试)? 我问,因为与使用SQLite3相反,即使在运行测试时,我所做的一切仍然存在。 所以目前我正在编写创建测试,然后手动删除我所做的一切。 但是对于集成测试来说,它变得很烦人甚至很复杂。 我做的样本: before(:each) do @user = User.create!(@attr) end after(:each) do # MongoDB is not a transactional DB, so added objects (create) during tests can’t be rollbacked # checking for the existance of a similar object with exact :name and :email (regex make it case insensitive) cleanup = User.where(:name => […]

在Ruby on Rails中,如何在会话之间将对象保留在内存中

我正在尝试构建一些东西(最终是一个gem,但现在是一个应用程序),其工作方式如下。 例如,假设DB记录是狗的品种。 每个品种都有一个Dog父类和一个子类。 直到运行时才知道实际品种。 当服务器开始时,它将从DB加载记录并根据记录实例化类的实例,例如,我可能有两个小猎犬和贵宾犬。 当有人来到服务器时,他们可能想要访问其中一个狗实例。 为什么不动态创建实例? 在我的例子中,“狗”基本上是包含算法和数据的类。 该算法没有改变,数据很少改变(大约几天),但是算法本身的执行,其使用数据和传递的一些动态数据,例如时间戳,将被访问多次。 如果必须重新创建对象的实例并且每次只是为了在下一个请求上再次执行请求而加载数据(请求不会更改对象的状态),那将是愚蠢的。 当我可以重复使用同一个对象时,我会创建并销毁多个对象。 将它保留在会话中是没有意义的,因为想要一个贵宾犬的人不需要在她的会话对象中有beagles信息; 这是无关紧要的(并且没有规模)。 如何将这些对象保存在内存中? 我基本上想要一个查找表来保存实例。 在Java中,我将使用某种类型的hashmap或数组创建一个单例,它位于内存中。 在rails中我通过在lib文件夹中创建一个单例类来尝试这个。 我认为 – 我可能不理解这一点 – 当会话消失时,实例(事实上它是单身人士没有实际意义)正在丢失。 我找到的最接近的答案是http://www.ruby-forum.com/topic/129372 ,它基本上将所有内容放在课程领域和方法中。 不知怎的,这似乎不对。 TIA! 另外:我来自Java。 在Java中,我只是创建一个位于堆上或者可能位于JNDI树中的对象,当HTTP请求进入时,它们将由一个servlet或EJB或一些每个请求项处理,然后可以访问持久对象。 我似乎无法在rails中找到相应的东西。

Ruby on Rails中的Web请求中存在哪些数据(如果有)?

我决定在创建视图助手类时使用单例设计模式。 这让我思考; 单例实例是否会在请求中存活? 这导致了另一个问题, 哪些变量(如果有的话)在Web请求中存在并且是否会根据部署而发生变化? (Fastcgi,Mongrel,Passenger,……) 我知道Controller实例变量没有持久化。 我知道常量是持久的(或重新加载?)。 但我不知道类变量,类的实例变量,Eigenclasses,……

如何在ruby gem中保存数据?

我正在开发一个用于rails应用程序的ruby gem。 gem需要使用来自Web服务的实时数据“初始化”。 但是这个初始化是一个漫长的过程,我想在某处保存初始化数据。 我应该在哪里保存? 我可以将它保存在父rails应用程序数据库中,但我需要创建表和迁移,这并不理想。 我正在考虑在gem文件夹中使用文本文件或redis数据库……这是一个好习惯吗? 谢谢。

如何在Rails中的页面加载中持久保存Ruby类变量?

我有一个类变量,我想从initilizer设置并从那时起保持值。 以下示例仅适用于第一页加载。 有一个更好的方法吗? 应用程序/模型/ token.rb class Token class << self attr_accessor :salt end end 配置/ initilizers / token.rb Token.salt = “savory hash”