PythonScript 政策部署错误问题排查

您正在查看 ApigeeApigee Hybrid 文档。
查看 Apigee Edge 文档。

InvalidResourceUrlFormat

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Deploying Revision revision_number to environment
Invalid resource url format. Resource url is invalid_URL.

错误消息示例

Error Deploying Revision 2 to prod
Invalid resource url format. Resource url is py:myscript.py.

示例屏幕截图

将修订版本 2 部署到生产环境时出错。

原因

如果 PythonScript 政策<ResourceURL><IncludeURL> 元素中指定的资源网址格式无效,则 API 代理的部署将失败。

正确格式如下所示:

<ResourceURL>py://file_name.py</ResourceURL>
<IncludeURL>py://file_name.py</IncludeURL>

例如,如果按如下所示指定 <ResourceURL> 元素,则 API 代理的部署将失败,因为它未遵循所需的格式:

<ResourceURL>py:myscript.py</ResourceURL>

诊断

  1. 标识 PythonScript 政策中使用的无效资源网址格式。您可以从错误消息中找到此信息。例如,在以下错误中,无效的资源网址格式为 py:myscript.py

    Invalid resource url format. Resource url is py:myscript.py.
  2. 检查出现错误的特定 API 代理中的所有 PythonScript 政策。如果存在任何 PythonScript 政策,其中 <ResourceURL><IncludeURL> 元素中指定的资源网址与上述第 1 步中指定的无效条目匹配,则会导致错误。

    例如,以下政策将资源网址指定为 py:myscript.py,它与错误消息中的内容匹配:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Script async="false" continueOnError="false" enabled="true" timeLimit="200" name="py-TotalVariable">
        <DisplayName>py-TotalVariable</DisplayName>
        <Properties/>
        <ResourceURL>py:myscript.py</ResourceURL>
    </Script>

    由于资源网址被指定为 py:myscript.py,这是无效的,因此 API 代理的部署失败并显示以下错误:

    Invalid resource url format. Resource url is py:myscript.py.

解决方法

确保 PythonScript 政策的 <ResourceURL> 元素中指定的资源网址格式有效。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Script async="false" continueOnError="false" enabled="true" timeLimit="200" name="py-TotalVariable">
    <DisplayName>py-TotalVariable</DisplayName>
    <Properties/>
    <ResourceURL>py://myscript.py</ResourceURL>
</Script>

InvalidResourceUrlReference

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Deploying Revision revision_number to environment
Invalid resource url ref invalid_reference in policy policy_name in org_name

错误消息示例

Error Deploying Revision 2 to prod
Invalid resource url ref py://myscript.py in policy Python_script in myorg

示例屏幕截图

将修订版本 2 部署到生产环境时出错。

原因

如果 <ResourceURL><IncludeURL> 元素引用了不存在的 PythonScript 文件,则 API 代理的部署将失败。如果您要从本地机器部署代理软件包,则必须将 PythonScript 源文件存储在 /apiproxy/resources/py 下(API 代理范围)。

在 Apigee 界面中,PythonScript 源文件会显示在 API 代理编辑器的导航工具窗格的“脚本”部分中的 py 下,如下所示:

API 代理编辑器导航窗格脚本部分。

您还可以将资源文件存储在环境级代码库中(例如,使 Python 代码可用于环境中的所有代理)。如果找不到政策中指定的任何资源文件,则会发生此错误。

诊断

  1. 标识发生错误的 PythonScript 政策以及无效的资源网址引用。您可以从错误消息中找到此信息。例如,在以下错误中,政策名称为 Python_script,无效资源网址引用为 py://myscript.py

    Invalid resource url ref py://myscript.py in policy Python_script in myorg
  2. 验证失败的 PythonScript 政策中指定的资源网址引用与错误消息中所标识的值是否匹配(上文中的第 1 步)。例如,以下政策将资源网址引用指定为 py://myscript.py,它与错误消息中的内容匹配:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Script async="false" continueOnError="false" enabled="true" name="Python_script">
        <DisplayName>Python-1</DisplayName>
        <Properties/>
        <ResourceURL>py://myscript.py</ResourceURL>
    </Script>
  3. 检查第 1 步中标识的文件是否是特定 API 代理软件包的一部分,或者是否存在于环境范围内。

    1. 要检查文件是否是特定 API 代理软件包的一部分,请执行以下步骤之一:
      1. 在 Apigee 界面中,检查此文件是否在 API 代理的 Scripts 部分。
      2. 下载 API 代理软件包并搜索文件是否存在。
    2. 如果文件不属于特定的 API 代理软件包,请检查环境级中是否存在该文件。您可以使用 Resource Files API 开展调查。

    如果 API 代理或环境级中不存在该文件,则会导致错误。

    在上述示例中,无效的 PythonScript 文件名是 myscript.py。在以下屏幕截图中,请注意在政策中指定为资源网址的文件没有出现在脚本部分中。此外,环境级别中也不存在该文件。因此,API 代理的部署失败并显示以下错误:

    Invalid resource url ref py://myscript.py in policy Python_script in myorg

资源网址无效。

解决方法

确保在 <ResourceURL><IncludeURL> 元素中指定的 PythonScript 文件引用 API 代理或环境级别中存在的有效文件。

要更正上面所示的示例 PythonScript 政策,请将文件 myscript.py 添加到 API 代理软件包。在下面的屏幕截图中,您可以看到 <ResourceURL><IncludeURL> 元素中指定的 PythonScript 文件显示在 API 代理软件包的脚本部分:

API 代理软件包的脚本部分。