Laravel Flysystem&;Rackspace CRON上传失败,401按需上传正常

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/ <...>

我们的系统每小时生成各种发票并将其上传到云端。也可以通过单击前端上的按钮按需创建发票

当手动请求创建所述发票时,该发票从未未能上传。 对于cron生成的发票,经过一段时间后,所有上载都会失败,原因是:

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()