小编Mar*_* A.的帖子

如何从Rails Observer/Model调用expire_fragment?

我几乎尝试过所有东西,但似乎不可能从模型中使用expire_fragment?我知道你不应该而且它不是非MVC,但肯定有很多方法可以做到.

我在lib/cache_helper.rb中创建了一个带有所有过期助手的模块,每个模块都只是一堆expire_fragment调用.我在/ app/sweepers下设置了所有缓存清理器,并在我的应用程序控制器中有一个"include CacheHelper",因此当通过控制器调用时,应用程序中的缓存可以正常工作.

然后事情是我有一些外部守护进程,特别是一些重复的cron任务,它们调用一个调用某种方法的rake任务.此方法执行一些处理并将条目输入到模型中,之后我需要使缓存过期.

这是最好的方法,因为我无法在模型中指定缓存清理程序.直观的观察者似乎是最好的解决方案,但后来它抱怨expire_fragment未定义等等,我甚至尝试将ActionController缓存类包含在观察者中,但这不起作用.我喜欢有关如何为此创建解决方案的一些想法.谢谢.

ruby memcached caching ruby-on-rails

29
推荐指数
4
解决办法
1万
查看次数

需要有关Chat App的MongoDB Schema的建议.嵌入式vs相关文档

我正在开始一个MongoDB项目,只是为了解决问题,并且有机会学习MongoDB/NoSQL模式.它将是一个实时聊天应用程序,堆栈包括:Rails 3,Ruby 1.9.2,Devise,Mongoid/MongoDB,CarrierWave,Redis,JQuery.

我将分别处理实时聊天轮询/消息排队.不确定Node.js,APE或自定义EventMachine应用程序.但是对于Mongo,我正在考虑将它用于应用程序中的其他所有内容,特别是聊天日志和历史记录.

我的问题是如何最好地设计模式,因为我以前的经验都是使用MySQL和关系数据库模式.作为一个子问题,我们何时最好将嵌入式文档与相关文档进行对比.

该应用程序将具有:

  • 多个帐户,有多个房间
  • 多个房间
  • 每个房间有多个用户
  • 允许用户进入的房间列表
  • 每个房间有多个用户聊天
  • 可搜索的聊天记录每个房间和每个用户
  • 给定聊天的可选文件附件

鉴于Mongo(至少我上次检查过)的文件限制为4MB,我不认为有一个房间集合和存储所有房间聊天,因为嵌入式文档会很好.

从我到目前为止的想法,我想做的事情如下:

  • 帐户集合
  • 房间的集合
    • 每个房间都与账户有关
    • 聊天集合中的相关文档,用于房间中的所有聊天消息
    • 嵌入式文档列出了当前房间内的所有用户
  • 用户的集合
    • 嵌入式文档列出了用户当前所在的所有房间
    • 嵌入式文档列出了允许用户进入的所有房间
  • 聊天集合
    • 每次聊天都与房间集合中的房间有关
    • 每个聊天都与用户集合中的用户相关
    • 嵌入式文档,包含有关可选上载文件附件的信

我主要担心的是,在最终看起来像一个关系模式并且我打败了目的之前,我还能走多远?肯定有比嵌入更多的相关内容.

另一个问题是,引用相关文档要比访问我所听到的嵌入式文档慢得多.

我想制作通用查询,例如:

  • 给我一个帐户的所有房间
  • 给我一个房间的所有聊天(或通过日期范围过滤)
  • 给我一个特定用户的聊天记录
  • 给我在给定房间或给定组织中的所有上传文件
  • 等等

有关如何以可扩展的方式有效地构建模式的任何建议?感谢大家.

ruby ruby-on-rails mongodb nosql mongoid

17
推荐指数
1
解决办法
3483
查看次数

MySQL或Rails在特定日期范围内每天获得AVG的最佳方式

我正在尝试在Rails中制作图表,例如在给定日期范围内每天的平均销售额

假设我有一个product_sold模型,它具有"sales_price"浮点属性.但是如果特定日期没有销售(例如模型/ db中没有),我想简单地返回0.

MySQL/Rails完成这项工作的最佳方法是什么?我知道我可以这样做:

(这个SQL查询可能是完全错误的方式来获得我想要的东西)

SELECT avg(sales_price) AS avg, DATE_FORMAT(created_at, '%m-%d-%Y') AS date
    FROM products_sold WHERE merchant_id = 1 GROUP BY date;
Run Code Online (Sandbox Code Playgroud)

得到这样的结果:

| avg |    date    |
  23    01-03-2009
  50    01-05-2009 
  34    01-07-2009
  ...       ...

我想得到的是:

| avg |    date    |
  23    01-03-2009
   0    01-04-2009
  50    01-05-2009
   0    01-06-2009 
  34    01-07-2009
   0    01-08-2009
  ...       ...

我可以使用SQL执行此操作,还是必须对结果进行后处理以查找日期范围中的哪些日期不在SQL结果集中?也许我需要一些子选择或IF语句?

感谢大家的帮助.

ruby mysql sql static-analysis ruby-on-rails

5
推荐指数
1
解决办法
5345
查看次数