2017-06-18 13 views
0

誰かがLaravel Queueジョブで静的変数を使用しましたか?Laravel Queueジョブの静的変数

静的変数を使用して受信ファイルのサイズを累積する必要があります。

たとえば、合計ファイルサイズが1000MBを超える場合、リモートサーバーに一度に要求する必要があります。以下は

[2017-06-18 07:59:44] local.ERROR: exception 'ErrorException' with message 'serialize(): "count" returned as member variable from __sleep() but does not exist' in C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Queue\Queue.php:89 
Stack trace: 
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'serialize(): "a...', 'C:\\xampp\\htdocs...', 89, Array) 

私のキューコードです。

<?php 

namespace App\Jobs; 

use App\Jobs\Job; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Log; 

class SendToAPI extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 
    private $data = null; 
    private static $count = 0; 
    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct($data) 
    { 
     $this->data = $data; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $count = $count + $this->data['file_size']; 
     if ($count > 1000) 
     { 
      // perform action 
     } 

    } 
} 
+0

「役に立たない」とは、私たちがあなたに役立つ情報ではありません。 – Joe

+0

申し訳ありません、私は私の投稿を迎えています。 – user3201419

+0

キューが非同期であり、後続の呼び出し中に発生する可能性があるため、 'static'はおそらく期待どおりに動作しません –

答えて

0

私はこの問題を複製し、同じエラーを得た、そしてそれについて検索:https://laracasts.com/discuss/channels/laravel/using-static-variable-in-job-class

このスレッドは静的変数がシリアル化されないと結論づけています。

"$ count = $ count + $ this-> data ['file_size'];を実行する代わりに、Redis(または一時記憶域)自体に合計ファイルサイズを保存することをお勧めします。 Redisでカウントをインクリメントし、カウントが限界を超えていることを確認します。

また、スレッドで説明した修正をチェックアウトすることもできます。