我们使用circleci作为部署过程的一部分.Circleci运行我们的3000次测试,有时会因为达到4 GB的内存限制而失败.看起来我们的一些测试正在创建大量对象并耗尽大量内存.我只是不知道哪些是.
有没有一种简单的方法可以分析用于给定测试的内存?如果我知道如何做到这一点,我可以轻松地遍历每个测试并运行它,看看它使用了多少内存.
我有一个场景,其中 2 个 db 连接可能都运行 Model.find_or_initialize_by(params) 并引发错误:PG::UniqueViolation: ERROR:重复键值违反唯一约束
我想更新我的代码,以便它可以优雅地从中恢复。就像是:
record = nil
begin
record = Model.find_or_initialize_by(params)
rescue ActiveRecord::RecordNotUnique
record = Model.where(params).first
end
return record
Run Code Online (Sandbox Code Playgroud)
问题是在我的本地机器上没有一个好的/简单的方法来重现这个,所以我不确定我的修复是否真的有效。
所以我想我会有点创意并尝试连续调用 create 2 次(本地),然后应该引发PG::UniqueViolation: ERROR,然后我可以从中拯救并确保一切都得到妥善处理。
但我收到此错误: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands waiting until end of transaction block
即使我将所有内容都包装在单个事务块中,我也会收到此错误
record = nil
Model.transaction do
record = Model.create(params)
end
begin
Model.transaction do
record = Model.create(params)
end
rescue ActiveRecord::RecordNotUnique
end
Model.transaction do
record = Model.where(params).first
end
return record
Run Code Online (Sandbox Code Playgroud)
我的问题:
我想我在这里可能遗漏了一些简单的东西,但已经晚了,也许我没有想得太清楚。
我正在运行 …