小编ste*_*cdn的帖子

Rails 4动态数据分页

嗨我有一个使用will_paginate宝石分页的rails4应用程序.

有没有办法处理经常创建的对象的分页?如果你在第一页和第二页之后调用第二页,同时考虑到新对象的创建,则会导致数据混乱(例如,sql请求中的偏移量将调用几乎与第一页相同的数据).

有没有办法使用快速变化的动态数据进行分页?

谢谢您的建议

pagination dynamic will-paginate ruby-on-rails-4

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

Rails 4 比较没有毫秒的日期时间

我试图在提供 JSON 的 Rails 4 API 中准确比较日期时间。当像这样以 rfc3339 格式向 API 发送日期时

"2015-05-06T21:16:43.611-0400"
Run Code Online (Sandbox Code Playgroud)

比较无法正常工作,因为 Rails 4 将日期时间与微秒精度进行比较,而日期以毫秒精度发送

有没有办法在做类似的事情时将比较“限制”到毫秒

object.created_at > '2015-05-06T21:16:43.611-0400'   
Run Code Online (Sandbox Code Playgroud)

datetime ruby-on-rails

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

如何使用Rails 4,Puma和Sidekiq配置Redis连接?

我正在使用Sidekiq(与Puma一起在Heroku上)异步发送电子邮件,并希望使用Redis保持计数器和缓存模型。

RedisCloud的免费计划包括与Redis的30个连接。我不清楚如何管理:

  • Sidekiq使用的Redis连接
  • 模型中使用的redis连接(缓存和计数器)

Sidekiq客户端大小配置如下:

Sidekiq.configure_client do |config|  
  config.redis = {url: ENV["REDISCLOUD_URL"], size: 3}
end
Run Code Online (Sandbox Code Playgroud)

如果我正确理解这一点,Puma会分叉多个过程(在我的情况下为2),这将导致:

2 (Puma Workers) * 3 (size) * 1 (Web Dyno) = 6 connections to redis used to push jobs.
Run Code Online (Sandbox Code Playgroud)

Sidekiq服务器

使用Sidekiq进行2个连接(或在版本4中为5个)时,将服务器大小默认设置为12或15并发设置为10。

如果我想使用所有剩余的可用连接(30-6 = 24),则可以设置:

Sidekiq.configure_client do |config|
  config.redis = { size: 19 }
end
Run Code Online (Sandbox Code Playgroud)

Redis连接总数将为19 + 5(Sidekiq 4)= 24,并且使用默认的并发25是可以的。正如Mike Perham所说,并发一般不能超过(服务器池大小-2)* 2。

现在,让我感到困惑的是在Sidekiq中使用Redis。

# initializers/redis.rb

$redis = Redis.new(:url => uri)
Run Code Online (Sandbox Code Playgroud)

每当我在模型或控制器中使用Redis时,我都会这样调用:

$redis.hincrby("mycounter", "key", 1)
Run Code Online (Sandbox Code Playgroud)

据我了解,当调用$ redis.whateverFunction时,所有puma线程在单个Redis连接上彼此等待。

在此答案中,在多线程Rails环境中使用Redis的最佳方法是什么?(Puma / Sidekiq),推荐的方法是使用与Sidekiq Wiki https://github.com/mperham/sidekiq/wiki/Advanced-Options#connection-pooling相关的connection_pool gem …

ruby multithreading redis sidekiq ruby-on-rails-4

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

Rails 4简单模型缓存与Redis

我是Redis和Rails缓存的新手,并希望执行简单的模型缓存.我刚读过这两篇文章:

http://www.sitepoint.com/rails-model-caching-redis/

http://www.victorareba.com/tutorials/speed-your-rails-app-with-model-caching-using-redis

因为Redis模型缓存包括在redis中存储JSON字符串并使用类似的代码检索它们

def fetch_snippets
  snippets =  $redis.get("snippets")
  if snippets.nil?
    snippets = Snippet.all.to_json
    $redis.set("snippets", snippets)
  end
  @snippets = JSON.load snippets
end
Run Code Online (Sandbox Code Playgroud)

我不明白使用的必要性

gem 'redis-rails'
gem 'redis-rack-cache'
Run Code Online (Sandbox Code Playgroud)

我没有看到缓存存储或其他缓存机制在这种示例中的使用位置,因为它们只包含对Redis的读/写.

感谢您的任何帮助.

ruby caching model redis ruby-on-rails-4

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

Jekyll - 无法访问自定义前端变量

我是Jekyll的新手,想在Post Frontmatter中创建其他变量:

style:
  name: post
img: image_name
Run Code Online (Sandbox Code Playgroud)

当我尝试使用像标题这样的变量时,它可以工作

{% page.title %}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用另一个变量时

{% if page.img %}
  {{ page.img }}
{% else %}
  No image
{% endif %}
Run Code Online (Sandbox Code Playgroud)

那将返回零.即使只是想输出

{{ page.img }}
Run Code Online (Sandbox Code Playgroud)

知道为什么我不能使用在frontmatter中定义的自定义变量吗?

blogs yaml jekyll yaml-front-matter

4
推荐指数
2
解决办法
1111
查看次数

如何在Heroku上选择Redis插件

我是Rails的新手,并试图在Heroku上使用Sidekiq和Rails 4.2.因此,我需要选择一个Redis Heroku附加组件,但是不太了解如何评估不同的服务(内存大小,连接......)

我将使用Sidekiq进行邮件程序,推送通知和外部API调用,最终一次保存一个对象.

有关哪个附加组件可供选择的建议?

ruby-on-rails heroku redis sidekiq

3
推荐指数
1
解决办法
1972
查看次数

Rails 4 Inner Join在同一张桌子上

在Rails 4应用程序中,我有以下关联:

User has_many :bookings
Booking belongs_to :client, class_name: "User"
Run Code Online (Sandbox Code Playgroud)

我试图通过表格来加入预订和客户端:

User.joins("INNER JOIN bookings on users.id = bookings.user_id").joins("INNER JOIN users on bookings.client_id = users.id") 
Run Code Online (Sandbox Code Playgroud)

哪个回报:

PG::DuplicateAlias: ERROR:  table name "users" specified more than once
Run Code Online (Sandbox Code Playgroud)

是否有解决方案来获取2个关联?

sql postgresql join ruby-on-rails ruby-on-rails-4

3
推荐指数
1
解决办法
679
查看次数

Rails 4 JOIN GROUP BY和SELECT

我正在尝试在Rails 4中联接2个表,以执行计数并保留联接表的列。

型号:用户has_many:orders

我想要的是:订单数量和最后订单的日期。

has_many :orders, -> { select("users.*, count(orders.id) as orders_count").group('users.id') }
Run Code Online (Sandbox Code Playgroud)

我想像这样在ORDERS表中选择created_at列

select("users.*, orders.created_at, count(orders.id) as orders_count").group('users.id')
Run Code Online (Sandbox Code Playgroud)

但是在那种情况下我会得到一个错误

PG::GroupingError: ERROR:  column "orders.created_at" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)

我需要FIRST created_at,因此我在created_at列上尝试了SQL聚合函数“ FIRST”

select("users.*, first(orders.created_at) as most_recent, count(orders.id) as orders_count").group('users.id')
Run Code Online (Sandbox Code Playgroud)

但是我会得到

PG::UndefinedFunction: ERROR:  function first(character varying) does not exist
Run Code Online (Sandbox Code Playgroud)

知道如何在联接表上实现此JOIN,COUNT和SELECT吗?

sql join ruby-on-rails

2
推荐指数
1
解决办法
8899
查看次数

Rails 4 Eager Load has_many单个对象的关联

在获取带有相关记录的对象数组时,我得到了使用预加载以避免N + 1的好处,但是在获取单个记录时使用预加载很重要吗?

就我而言

user has_many :addresses
user has_many :skills
user has_many :devices
user has_many :authentications
Run Code Online (Sandbox Code Playgroud)

在表演动作中,我尝试使用机架迷你分析器查看是否渴望使用急切加载

User.includes(:skills, :addresses, :devices, :authentications).find(params[:id])
Run Code Online (Sandbox Code Playgroud)

但我似乎有相同数量的sql请求。

是否有针对此类情况使用紧急加载的建议?

many-to-many ruby-on-rails has-many eager-loading ruby-on-rails-4.1

2
推荐指数
2
解决办法
5355
查看次数