嗨我有一个使用will_paginate宝石分页的rails4应用程序.
有没有办法处理经常创建的对象的分页?如果你在第一页和第二页之后调用第二页,同时考虑到新对象的创建,则会导致数据混乱(例如,sql请求中的偏移量将调用几乎与第一页相同的数据).
有没有办法使用快速变化的动态数据进行分页?
谢谢您的建议
我试图在提供 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) 我正在使用Sidekiq(与Puma一起在Heroku上)异步发送电子邮件,并希望使用Redis保持计数器和缓存模型。
RedisCloud的免费计划包括与Redis的30个连接。我不清楚如何管理:
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 …
我是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的读/写.
感谢您的任何帮助.
我是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中定义的自定义变量吗?
我是Rails的新手,并试图在Heroku上使用Sidekiq和Rails 4.2.因此,我需要选择一个Redis Heroku附加组件,但是不太了解如何评估不同的服务(内存大小,连接......)
我将使用Sidekiq进行邮件程序,推送通知和外部API调用,最终一次保存一个对象.
有关哪个附加组件可供选择的建议?
在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个关联?
我正在尝试在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吗?
在获取带有相关记录的对象数组时,我得到了使用预加载以避免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