2015-06-17 19 views
6

Tôi đã tạo một Công việc mới trong ứng dụng ấu trùng 5.1, chạy trong Máy chủ Homestead. Tôi đã đặt nó được xếp hàng đợi và có mã trong phương thức xử lý.laravel 5.1 không thấy thay đổi đối với tệp Công việc mà không cần VM khởi động lại

Phương thức handle() trước đó dự kiến ​​thông số được truyền, nhưng không còn cần thiết nữa và tôi đã xóa mẫu param phương thức xử lý.

Tuy nhiên, khi hàng đợi chạy công việc tôi nhận được một lỗi nói:

[2015-06-17 14:08:46] local.ERROR: exception 'ErrorException' with message 'Missing argument 1 for Simile\Jobs\SpecialJob::handle()' in /home/vagrant/Code/BitBucket/simile-app/app/Jobs/SpecialJob.php:31 

dòng 31 của file đó là:

public function handle() 

của nó không còn mong đợi bất kỳ thông số, trừ khi có một mặc định một tài liệu không được ghi lại.

Bây giờ BẤT K changes thay đổi nào tôi thực hiện, bao gồm cả nhận xét về TẤT CẢ nội dung trong tệp Công việc sẽ không được nhìn thấy khi tôi chạy hàng đợi. Tôi vẫn sẽ gặp lỗi tương tự.

Ive đã cố gắng khởi động lại nginx, php5-fpm, supervisor, beanstalkd, và chạy: artisan cache:clear, artisan clear-compiled, artisan optimize, composer dumpautoload.

Không có gì hoạt động.

Cách duy nhất tôi nhận được laravel để xem bất kỳ cập nhật cho tệp công việc là khởi động lại VM. vagrant halt, sau đó vagrant up.

Công việc được kích hoạt trong một lệnh điều khiển như thế này:

$this->dispatch(new SpecialJob($site->id)); 

Đây là mã đầy đủ của tập tin SpecialJob.php:

http://laravel.io/bin/qQQ3M#5

Tôi đã cố gắng tạo ra một công việc mới và thử nghiệm, Tôi nhận được kết quả tương tự.

Tất cả các tệp không phải công việc khác sẽ cập nhật ngay lập tức, không có vấn đề gì. Chỉ các tệp công việc của nó. Giống như một bản sao cũ đang được lưu trữ ở đâu đó mà tôi không thể tìm thấy.

+0

Bạn có sử dụng 'cờ --daemon' về người lao động hàng đợi? – ceejayoz

+0

@ceejayoz có, tôi. – Nicekiwi

+0

Bạn có đang chạy 'hàng đợi nghệ sĩ php: restart' như được chỉ ra trong tài liệu cho daemon không? – ceejayoz

Trả lời

15

Khi chạy công nhân xếp hàng as a daemon, bạn phải yêu cầu nhân viên khởi động lại sau khi thay đổi mã.

Vì trình xử lý hàng đợi daemon là các quy trình dài, chúng sẽ không nhận các thay đổi trong mã của bạn mà không được khởi động lại. Vì vậy, cách đơn giản nhất để triển khai một ứng dụng bằng cách sử dụng công nhân hàng đợi của daemon là khởi động lại các nhân viên trong suốt kịch bản triển khai của bạn. Bạn duyên dáng có thể khởi động lại tất cả các công nhân bằng cách đưa vào các lệnh sau đây trong kịch bản triển khai của bạn:

php artisan queue:restart 
+2

Cảm ơn bạn. Bị đập đầu của tôi trong 2 ngày qua haha ​​này! : P Đạo đức: Không bao giờ giả sử. – Nicekiwi

+1

Wow! Nó là cái tốt!Thực sự tốt nhất! Giữ nó lên laravel: D: D Cảm ơn bạn ceejayoz! – BlackBurn027

+0

Hút thuốc lá thánh, tôi vừa trải nghiệm vấn đề kỳ lạ này và rất vui khi thấy câu trả lời của bạn. http://stackoverflow.com/questions/28623001/how-to-keep-laravel-queue-system-running-on-server#comment73972105_28625847 cũng giúp tôi. Và điều này có vẻ thú vị: http://stackoverflow.com/a/32851454/470749 – Ryan

Các vấn đề liên quan