小编Rap*_* Pr的帖子

在模型的所有数据上重置计数器缓存

我正在寻找一种更新给定模型的计数器缓存的漂亮方法.

这是我的模型:

class GameParticipation < ActiveRecord::Base
  belongs_to :game, counter_cache: true
end
Run Code Online (Sandbox Code Playgroud)

而且:

class Game < ActiveRecord::Base
  has_many   :game_participations
end
Run Code Online (Sandbox Code Playgroud)

这不是比像下面的代码迭代每个元素更好的东西吗?

Game.pluck(:id).map{|g_id| Game.reset_counters(g_id, :game_participations) }
Run Code Online (Sandbox Code Playgroud)

(我正在使用Rails4和activerecord)

activerecord ruby-on-rails

6
推荐指数
1
解决办法
2797
查看次数

在后台作业后触发页面的重新加载

我有一个 rails 4 应用程序,它正在做一个背景演算。所以用户按下一个按钮,它会为长计算启动一个后台作业(使用 delay_job)并到达一个等待页面。尽管微积分是异步完成的,但我想找到一种方法来警告用户并在微积分完成后自动重新加载页面。

我查看了几种解决方案:

  • Faye 或 private_pub => 我不能为这个非常具体的工作使用另一台服务器
  • ActionController::Live => 我不确定如何在工作完成后触发操作
  • 轮询 => 目前最好的解决方案,但我希望找到比轮询更不贪婪的东西

如果您对此问题有任何明智的解决方案,或者对我在列出的想法中的局限性提出任何建议。

asynchronous ruby-on-rails delayed-job faye ruby-on-rails-4

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

后台作业花费的时间是 Rails 内相同操作的两倍

在我的 Rails 应用程序中,我有一个需要大量数据库访问的长计算。

简而言之,我的计算用了 25 秒。

在后台作业(一个大的单个工人)中实现相同的计算时,相同的计算需要两倍的时间(即 50 秒)。我尝试了几种技术将工作放在后台进程中,没有对我的表现产生影响 => 使用 DelayJob/Sidekiq/在我的轨道内但在为工作创建的线程中执行该过程,但所有对我的影响都相同我的表演*2。

这种性能差异只存在于 rails 的“生产”环境中。看起来我的后台工作中没有完成由 rails 完成的优化。

我的技术环境如下=>

  • 我正在使用 ruby​​ 2.0 / rails 4
  • 我正在使用独角兽(但没有它我也有同样的问题)。
  • 该作业使用 Rails.cache 来存储一些部分计算。
  • 我正在使用 postgresql

有没有人知道这种影响可能来自哪里?

ruby-on-rails delayed-job

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