Laravel:Queue Driver の違いで動作結果が変わる怪事件発生
目次
何故!? Queue Driver =Sync と =Database で答えが違う
プログラミングの最中はsyncで動かして上手く動いてからdatabaseで実証実験なんて組み方あると思います。
私もそんな組み方をいつもしています。
そこで起こったのかこの怪現象。
syncでは全文字列置換をするのに、databaseでは一部の文字列しか置換しない
何故だ!?
原因はキャッシュでした…。
queueをsyncに戻して大量データ処理をしない様に1件のレコードを指定して確かめようとプログラムを書き換えます。
foreachをコメントアウトして、foreachで拾ってくる値を1レコードだけベタ打ちして、準備万端。
実行!!
あれ??foreach が廻ってる…。
上書きする前に実行しちゃったかな?確実に上書きして、もう一回実行!!
やっぱりコメントアウトしたはずの foreach が廻ってる…。
こうなるともうわけわからん。と言う事でメンターに確認を取ります。
やはりコメントアウトしたものが実行されている事は異常であるとの事。
そりゃそうですよね。だから質問したんですもん。
コメントアウトしたにも関わらず実行されているとすれば疑うべきはキャッシュ
はい、回答いただきました。
キャッシュクリアしてみます。
1 |
php artisan cache:clear |
再度スクリプトを実行!!
お~~~意図したとおりに動く。syncの時と同じです。
Laravelではjob / workerはキャッシュに入ると心得る
変更したら毎回キャッシュクリアしましょう。
clearしないとずっとトンネルの中かもしれません。
まとめ
今回は「まさかそこに答えがあるとは」という事案でした。
いやぁ~無駄な時間を費やしてしまった。
-
前の記事
Laravel:大量データ処理の速度と利便性がトレードオフ 2019.08.08
-
次の記事
楽天市場検索アルゴリズム:疑惑から確信に変わった配送伝票番号の記載 2019.08.21
コメントを残す