我的用户可以拥有许多身份(取决于他们是使用Facebook,Google还是我的网站登录)。在ActiveAdmin中显示标识我有以下代码。
ActiveAdmin.register User do
menu label: 'Subscribers'
ActiveAdmin.register Identity do
belongs_to :user
end
index do
selectable_column
column :email
column :current_sign_in_at
column :sign_in_count
column :created_at
column "Sign-up Provider", :identities do |user|
ul do
user.identities.collect do |identity|
li do
if identity.provider == "gplus"
"Google"
else identity.provider == "facebook"
identity.provider.capitalize
end
end
end
"Self"
end
end
actions
end
form do |f|
f.inputs 'User Details' do
f.input :email
f.input :password
f.input :password_confirmation
end
f.actions
end
end
它在本地主机和远程开发环境中工作正常。但是在使用生产环境的分段上运行时会出现502错误。 看到日志似乎查询需要很长时间。试图弄清楚为什么需要更长的时间,似乎一次又一次地为每个用户执行获取身份的查询,这是一种低效的方式。我们还尝试在分段中使用数据并在本地和开发环境中导入它以查看它是否是导致错误的数据大小,但它仍然在那里工作。我理解查询效率低下。实现这一目标的正确方法是什么?
如果我使用的是正确的方法,请帮我解决错误。感谢。
令人惊讶的是,如果我删除标识列,则不会发生此错误。
答案 0 :(得分:0)
嗯,这个问题有一个非常不寻常的解决方案,可能与这个问题没有特别的关系,但是是的
问题在于记忆。在服务器上,磁盘空间变得过度使用。我们通过删除一些旧的日志文件释放了一些内存,并使用pluck
代替collect
,只是为了获取所需的"提供商"而不是整个记录。