【问题标题】:Sentry Transport errors哨兵运输错误
【发布时间】:2021-08-08 20:27:27
【问题描述】:

我正在尝试在我们的应用程序中实现 Sentry。

我使用了sentry/sdk,但出现了一些错误(可能是由于某些 PHP 设置),所以我现在尝试切换 transport method

我从 composer.json 文件中删除了sentry/sdk,并将其替换为sentry/sentryphp-http/guzzle7-adapter。请注意,在文档中,他们使用guzzle6-adapter,但这会产生依赖错误(我已经在使用"guzzlehttp/guzzle": "^7.3",所以我需要使用版本7)。

现在尝试初始化 Sentry 时,出现以下错误:

Fatal error: Uncaught Http\Discovery\Exception\DiscoveryFailedException: Could not find resource using any discovery strategy. Find more information at http://docs.php-http.org/en/latest/discovery.html#common-errors - Puli Factory is not available - No valid candidate found using strategy "Http\Discovery\Strategy\CommonClassesStrategy". We tested the following candidates: . - No valid candidate found using strategy "Http\Discovery\Strategy\CommonPsr17ClassesStrategy". We tested the following candidates: Phalcon\Http\Message\StreamFactory, Nyholm\Psr7\Factory\Psr17Factory, Zend\Diactoros\StreamFactory, GuzzleHttp\Psr7\HttpFactory, Http\Factory\Diactoros\StreamFactory, Http\Factory\Guzzle\StreamFactory, Http\Factory\Slim\StreamFactory, Laminas\Diactoros\StreamFactory, Slim\Psr7\Factory\StreamFactory. in vendor/php-http/discovery/src/Exception/DiscoveryFailedException.php:41

这是一个自定义应用程序,所以我不能使用例如Sentry Laravel 包。

【问题讨论】:

    标签: php guzzle sentry


    【解决方案1】:

    目前文档不正确,并引用了所需的旧依赖项。

    如果您想使用 Guzzle,以下应该可以工作:

    composer require sentry/sentry guzzlehttp/guzzle http-interop/http-factory-guzzle
    

    这将重新创建当前的 SDK 元包dependencies

        "require": {
            "sentry/sentry": "^3.1",
            "http-interop/http-factory-guzzle": "^1.0",
            "symfony/http-client": "^4.3|^5.0"
        },
    

    除了symfony/http-clientguzzlehttp/guzzle代替。

    【讨论】:

    • 感谢您的回复@Alex Bouma。我没有明确包含guzzlehttp/psr7,因为guzzlehttp/guzzle:"guzzlehttp/psr7": "^1.7 || ^2.0", 已经需要并安装了它。我也确实在vendor 目录中看到了该文件夹。所以我想知道你的建议是否能解决这个问题。
    • 查看sentry/sdk 包,您可能需要http-interop/http-factory-guzzle 而文档可能已过时,根据错误中的链接,它也可能是php-http/message...让我知道如果这两个工作中的任何一个工作,如果是这样,我们应该确保文档得到更新!
    • "http-interop/http-factory-guzzle": "^1.0", 已列在sentry/sentryrequire-dev 部分。在我们的生产环境中,不包括开发依赖项。 "php-http/message": "^1.5", 已列在 require 部分中,因此已加载到生产环境中。
    • 是的,它是一个开发依赖项,因为理论上你将http-facture-guzzle 替换为任何其他兼容的工厂。手动添加http-interop/http-factory-guzzle 作为您自己项目的依赖项是否有效?您希望要求与 sentry/sdk requires 相同,但实际的 http 客户端 (symfony/http-client) 本身除外。附带说明一下,您的依赖项的开发依赖项永远不会安装。
    • 我已经更新了答案,稍后我将努力整理文档。题外话:关于性能跟踪,仅使用 sentry/sentry 本身实际上什么都不做,这是因为它纯粹是在 PHP 中实现的,所以如果没有框架集成,什么都不会被“跟踪”,您需要将跟踪代码添加到您自己的代码中基地:docs.sentry.io/platforms/php/performance/…。您可以查看框架集成以供参考,并了解如何实现它。
    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多