ਕਲਾਊਡ (Claude) ਨੇ ਰੇਲਜ਼ (Rails) ਕਾਲਬੈਕਸ (callbacks) ਬਾਰੇ ਕੀ ਸੋਚਿਆ ਸੀ
ਮੈਂ LineItem ਰਿਕਾਰਡਾਂ ਅਤੇ ਉਹਨਾਂ ਦੀਆਂ S3 ਫਾਈਲਾਂ ਨੂੰ ਡਿਲੀਟ ਕਰਨ ਲਈ ਇੱਕ rake task ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ। ਮੈਂ Order ਵਰਗੇ ਪੇਰੈਂਟ ਮਾਡਲਾਂ (parent models) 'ਤੇ ਮਹਿੰਗੇ ਕਾਲਬੈਕਸ (callbacks) ਤੋਂ ਬਚਣਾ ਚਾਹੁੰਦਾ ਸੀ।
ਮੈਂ ਮਦਦ ਲਈ Claude ਤੋਂ ਪੁੱਛਿਆ। ਉਸਨੇ ਮੈਨੂੰ ਇੱਕ ਭਰੋਸੇਮੰਦ ਜਵਾਬ ਦਿੱਤਾ। ਪਰ ਉਹ ਗਲਤ ਸੀ।
ਇੱਥੇ ਉਹ ਹੈ ਜੋ ਮੈਂ Rails, counter caches, ਅਤੇ ਇਸ ਬਾਰੇ ਸਿੱਖਿਆ ਕਿ ਤੁਹਾਨੂੰ AI ਦੀ ਸਲਾਹ ਦੀ ਪੁਸ਼ਟੀ ਕਿਉਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।
ਸਮੱਸਿਆ LineItem, OrderItem ਨਾਲ ਸਬੰਧਤ ਹੈ। OrderItem, Order ਨਾਲ ਸਬੰਧਤ ਹੈ। ਦੋਵੇਂ counter_cache ਅਤੇ touch ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। ਇੱਕ LineItem ਨੂੰ ਡਿਲੀਟ ਕਰਨ ਨਾਲ ਇੱਕ ਕੈਸਕੇਡ (cascade) ਸ਼ੁਰੂ ਹੋ ਜਾਂਦਾ ਹੈ। ਇਹ ਕੈਸਕੇਡ ਸ਼ਿਪਿੰਗ ਅਨੁਮਾਨ (shipping estimations) ਅਤੇ ਕੁੱਲ ਰੀਕੈਲਕੂਲੇਸ਼ਨ (total recalculations) ਵਰਗੇ ਭਾਰੀ ਕੰਮਾਂ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ। CPU ਅਤੇ S3 ਲਾਗਤਾਂ ਨੂੰ ਬਚਾਉਣ ਲਈ ਮੈਨੂੰ ਇਸ ਕੈਸਕੇਡ ਨੂੰ ਰੋਕਣ ਦੀ ਲੋੜ ਸੀ।
AI ਦੀ ਗਲਤੀ Claude ਨੇ skip_callback ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਸੁਝਾਅ ਦਿੱਤਾ। ਇਹ ਇੱਕ ਮਾੜਾ ਵਿਚਾਰ ਹੈ। skip_callback ਕਲਾਸ ਨੂੰ ਗਲੋਬਲ ਤੌਰ 'ਤੇ ਬਦਲ ਦਿੰਦਾ ਹੈ। ਇਹ ਤੁਹਾਡੀ ਐਪ ਦੇ ਹਰ ਥ੍ਰੈਡ (thread) ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ। ਜੇਕਰ ਤੁਹਾਡਾ ਕੋਡ ਇਸਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਹਾਡੇ ਕਾਲਬੈਕਸ ਬੰਦ ਹੀ ਰਹਿ ਜਾਣਗੇ।
ਫਿਰ ਮੈਂ no_touching ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ। ਸੁਰੱਖਿਅਤ ਰਹਿਣ ਲਈ ਮ