我有一些代码,神奇地停止工作(没有代码被推)!
我有一个函数,每晚都会被调用来收取订阅费,调用的函数如下:
def cycle_subscriptions( async = true )
Subscriptions::Subscription.ready_to_cycle.find_each do |s|
if async
CycleSubscriptionBillingPeriodWorker.perform_async( s.id )
else
s.cycle_billing_period!
end
end
end
ready_to_charge
通过以下方式创建一些作用域:
scope :cycleable, ->{ where.not(status: [self.statuses[:suspended], self.statuses[:suspended_payment_failed], self.statuses[:cancelled], self.statuses[:cancelled_payment_failed], self.statuses[:trial_expired]]) }
scope :ready_to_cycle, ->{ cycleable.where( "next_bill_date < ?", Time.now ) }
这将在本地创建如下查询:
SELECT "subscriptions_subscriptions".* FROM "subscriptions_subscriptions" WHERE ("subscriptions_subscriptions"."status" NOT IN (1, 5, 2, 8, 7)) AND (next_bill_date < '2023-01-13 16:40:05.365004') ORDER BY "subscriptions_subscriptions"."id" ASC LIMIT 1000
但是,在服务器上,它会创建以下查询:
SELECT "subscriptions_subscriptions".* FROM "subscriptions_subscriptions" WHERE ("subscriptions_subscriptions"."status" NOT IN (1, 5, 2, 8, 7)) AND (next_bill_date < '2023-01-13 16:59:49.014069') ORDER BY "subscriptions_subscriptions"."" ASC LIMIT 1000
注意ORDER BY "subscriptions_subscriptions"."" ASC
中缺少id
,我相信find_each
是该子句的附加内容。
为什么不添加主键字段到查询中?我很失落,很高兴能分享任何信息,我可以帮助解决这个问题。
1条答案
按热度按时间qyzbxkaa1#
答案:看起来好像有人从数据库中删除了id列的pkey和index(不是列本身)。我运行了
ALTER TABLE collections ADD PRIMARY KEY (id)
,让一切恢复正常。看起来我现在可以和人交谈了--不知道这是怎么发生的。