PythonScript 政策部署错误问题排查

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

InvalidResourceUrlFormat

错误消息

通过 Edge 界面或 Edge Management 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.

示例屏幕截图

原因

如果 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

错误消息

通过 Edge 界面或 Edge Management 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

示例屏幕截图

原因

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

在 Edge 界面中,PythonScript 源文件显示在“脚本”部分的 py 下 进入 API 代理编辑器的 Navigator 窗格,如下所示:

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

诊断

  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. 在 Edge 界面中,检查此文件是否在 API 代理的“脚本”部分。
      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 代理软件包的脚本部分: