Laravel Flysystem&;Rackspace CRON上传失败,401按需上传正常
我们的系统每小时生成各种发票并将其上传到云端。也可以通过单击前端上的按钮按需创建发票 当手动请求创建所述发票时,该发票从未未能上传。 对于cron生成的发票,经过一段时间后,所有上载都会失败,原因是:Laravel Flysystem&;Rackspace CRON上传失败,401按需上传正常,laravel,laravel-5,laravel-5.1,flysystem,laravel-filesystem,Laravel,Laravel 5,Laravel 5.1,Flysystem,Laravel Filesystem,我们的系统每小时生成各种发票并将其上传到云端。也可以通过单击前端上的按钮按需创建发票 当手动请求创建所述发票时,该发票从未未能上传。 对于cron生成的发票,经过一段时间后,所有上载都会失败,原因是: Client error response [status code] 401 [reason phrase] Unauthorized [url] https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_930575/ <...>
Client error response
[status code] 401
[reason phrase] Unauthorized
[url] https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_930575/ <...> .pdf" @ Guzzle\Http\Exception\BadResponseException->factory
这是我们的配置:
'default' => 'rackspace',
'disks' => [
'rackspace' => [
'driver' => 'rackspace',
'username' => ' ... ',
'key' => ' ... ',
'container' => ' ... ',
'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
'region' => 'DFW',
]
]
非常感谢您对此事的任何意见。我也遇到过类似的问题。对于这个问题,文档和错误率似乎很低。在这里阅读()它看起来像是一个过期的令牌是根本原因 上面链接的建议是通过
$client->authenticate();
但是,客户端被一些命令所覆盖。您应该能够通过
Storage::disk('my-disk')->getDriver()->getAdapter()->getContainer()->getClient()->authenticate();
不幸的是,我在尝试时出现了一个35 curl错误(SSL\u CONNECT\u错误)
有一个
hasExpired()
方法也可用。如果遇到相同的错误,您应该能够将此检查与某种机制结合起来,以重新启动cron作业或worker。虽然这肯定远不是一个理想的解决方案,但它应该可以让您启动并运行。您可能认为这种行为会被自动捕获和处理
5/25更新:在这里又花了几个小时试图找到解决方案后,我放弃了,只是创建了一个cron作业,每12小时重新启动一次相关的工作人员。据推测,令牌的有效期为24小时(根据),因此12小时的窗口应该可以安全地防止错误发生。虽然超级黑客,但它确实保持了该站点的正常运行。在这里,我再次尝试在将近2.5个月后找到解决问题的方法。我想这一次当我重读@Tommmm update时,它真的点击了 因此,您重新启动了工人队列,我开始思考我运行主管/工人的方式
php artisan队列:工作数据库--守护进程--睡眠=10次尝试=3
--守护进程(在本文中已经很好地解释了这一点) 在Laravel>=4.2中添加了一个
--daemon
命令。它的工作方式就是直接运行队列,而不是在处理每个队列后重新启动整个框架。这是一个可选命令,可显著降低队列的内存和cpu需求
--daemon
命令的要点是,在升级应用程序时,需要使用queue:restart专门重新启动队列,否则可能会出现各种奇怪的错误,因为队列内存中仍然会有旧代码
由于应用程序从未再次启动,我觉得令牌也从未更新过。至于应用程序的其余部分,仍然更新令牌并使用新的令牌。这就解释了为什么所有点击操作都能正常工作,而只有后台任务失败。至于为什么临时部署解决了我们的问题,我们在每次部署后都有
队列:restart
我很确定这是事实,现在有两种可能性。要么在一段时间后重新启动工人(感谢更新。我目前也在测试各种问题。我们的cron每小时运行一次,我尝试组合
haspeired
和authenticate
,但没有结果。haspeires
似乎每次都返回false。当我尝试使用cron记录令牌时(每分钟)然后我每次都得到不同的结果。还不确定是否相关。$client->getToken()
hasExpired()