Why don't my Laravel 5.2 events work on production when they work locally?

北城以北 提交于 2019-12-24 17:27:39

问题


Locally, my Laravel 5.2 project works well, including events that are queued using Redis.

IMPORTANT UPDATE: I later discovered that this premise was incorrect (and my events don't use Redis), and so I'd accidentally posted this question in a misleading way. I hope my ridiculously long struggle and my answer below will be helpful to someone else who is an events newbie too.

But I've deployed my project to a production server (where I'm using a Laradock Docker setup).

There, on production, Redis works for caching and for delayed dispatching of jobs.

So I know that my Redis setup is good.

But events don't work (even though they worked when my project was on my local computer).

My question is not a duplicate of Laravel 5.2 event not firing in production because I'm not using broadcasting and because I am using Laradock.

I've also already tried these commands (inside the container at docker exec -it laradock_workspace_1 bash):

php artisan config:cache
php artisan clear-compiled
php artisan optimize
composer install --no-dev
composer dumpautoload
php artisan queue:restart

回答1:


My events are working on production now. Here is what I learned:

  1. I'd read https://laravel.com/docs/5.2/events many times, but I don't know where/why I got the idea that "events" (which were a new concept to me) relied on Redis or cron jobs. So the entire premise of my question above was wrong! I was not using Illuminate\Contracts\Queue\ShouldQueue, so everything was synchronous and should have been more straightforward than I was thinking.

  2. I think this tip about composer dumpautoload and php artisan clear-compiled was helpful (for after each edit of files on production).

  3. The main issue seemed to be that a certain database table of mine seemed to have records with weird values, and those records were being checked by the event, and that's where it was all breaking.

    • And I think these records probably got into that corrupted state because on production I don't think I'd started the cronjobs and workers immediately upon deployment.
    • My local environment was working because its table didn't have these corrupted records.

Hopefully my naive and misleading question (which led to this ridiculously long struggle and this answer) will be helpful to someone else who is an events newbie too.



来源:https://stackoverflow.com/questions/57732175/why-dont-my-laravel-5-2-events-work-on-production-when-they-work-locally

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!