Laravel 4.1使用beanstalkd驱动程序对邮件进行排队 - "用于反序列化的数据不足"

时间:2014-03-31 21:36:13

标签: php laravel laravel-4 beanstalkd pheanstalk

我正在使用我的第一个Laravel应用程序,在尝试使用Mail::queue发送电子邮件时排队发送电子邮件时遇到了一个奇怪的问题。

我最初使用sync驱动程序,一切正常,但现在切换到beanstalkd驱动程序,它已停止发送我的电子邮件。

我的配置如下:

  • Ubuntu 13.10
  • Laravel 4.1
  • PHP 5.5.3
  • 通过apt-get
  • 安装Beanstalkd 1.8 在"pda/pheanstalk": "2.1.*"
  • composer.json

我所注意到的是每次我跑

$ php artisan queue:work

我得到了:

  [ErrorException]                                                  
  Insufficient data for unserializing - 2570 required, 168 present  


queue:work [--queue[="..."]] [--delay[="..."]] [--force] [--memory[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]

我已经尝试选择redis驱动程序并且没有给我错误,所以显然pheanstalk在我的机器上运行有什么问题。

我已尝试更改composer.json中的pheanstalk版本,但无论我使用哪个版本,我仍然会遇到同样的问题。

问题是,这个问题似乎没有得到特别广泛的记录,而且错误信息实际上并没有给予足够的信息......

有任何建议吗?

3 个答案:

答案 0 :(得分:1)

检查此回复:https://stackoverflow.com/a/28226746/1427439

您可能遇到同样的问题。

基本上,请确保您没有使用任何Eloquent模型与您传递给Mail::queue

的闭包

答案 1 :(得分:0)

Laravel对推送到队列的所有内容进行序列化和加密。您的应用程序加密密钥(app/config/app.php 'key')是否设置为非空值?

您可以自己查询beanstalkd,看看哪些消息被推送到队列中?你应该看到这样难以理解的字符串:

eyJpdiI6IlZwT1p6QkhXQ3BcL0lRUmlHXC9maE8xT2o5Rk1BSUtMM0d5SlRoKzcrSGNLTT0iLCJ2YWx1ZSI6Im02N05LQzNPamNZSmVpTW5kXC80NnkyWEl0RUFMZHFiQXo0VnlNYUlLUUQzSzUrZHNIS2Vlb1kxWkpRS1VFZm5SVERXeHduWEFQelE5SCtZbVBwRmk2QkJPTlB5ek1RNWpKM3JRTzBDSlB3N3orYmk5UmZwM0ZzNmlpVVdQWVdQNWtKSWVQVG5nK29MajcyM3VtTUdraE5SNXJXYUJyYUErb25iTUJGSzhQYms9IiwibWFjIjoiNGFmNjMwNjYxYzk4NmMyZTA2ZTZlMzAwZTBlZjZhMTA1OGM2NzAxNTBkNWUzYTA2MTY3NzNiMTU4NTRlMmEyOSJ9

该错误意味着您要推送的字符串要么未加密,要么中途停止将作业推送到队列中途。如果没有别的,你可以搜索那个例外的文本("用于反序列化的数据不足")它应该产生一个vendor/pda/pheanstalk的PHP文件,你可以试着去理解什么&#39继续。

答案 2 :(得分:0)

您无法将对象传递给视图数据,因为laravel无法将它们序列化正确,因此您只需将传递给视图的任何数据更改为简单的数据结构(如数组)。