Host Manager App -- Text Interface

本文档详述了Apache Tomcat中的HostManager应用,指导如何使用文本界面进行虚拟主机的创建、删除及管理。通过HTTP请求,用户可以实现虚拟主机的增删改查操作,并能持久化配置。

Tomcat Home
The Apache Software Foundation
Apache Tomcat 8
Version 8.5.54, Apr 3 2020
Links

Docs Home
FAQ
User Comments

User Guide

1) Introduction
2) Setup
3) First webapp
4) Deployer
5) Manager
6) Host Manager
7) Realms and AAA
8) Security Manager
9) JNDI Resources
10) JDBC DataSources
11) Classloading
12) JSPs
13) SSL/TLS
14) SSI
15) CGI
16) Proxy Support
17) MBeans Descriptors
18) Default Servlet
19) Clustering
20) Load Balancer
21) Connectors
22) Monitoring and Management
23) Logging
24) APR/Native
25) Virtual Hosting
26) Advanced IO
27) Additional Components
28) Mavenized
29) Security Considerations
30) Windows Service
31) Windows Authentication
32) Tomcat's JDBC Pool
33) WebSocket
34) Rewrite

Reference

Release Notes
Configuration
Tomcat Javadocs
Servlet 4.0 Javadocs
JSP 2.3 Javadocs
EL 3.0 Javadocs
WebSocket 1.1 Javadocs
JASPIC 1.1 Javadocs
Common Annotations 1.2 Javadocs
JK 1.2 Documentation

Apache Tomcat Development

Building
Changelog
Status
Developers
Architecture
Functional Specs.
Tribes

Host Manager App – Text Interface
Table of Contents

Introduction
Configuring Manager Application Access
List of Commands
    List command
    Add command
    Remove command
    Start command
    Stop command
    Persist command

Introduction

The Tomcat Host Manager application enables you to create, delete, and otherwise manage virtual hosts within Tomcat. This how-to guide is best accompanied by the following pieces of documentation:

Virtual Hosting How-To for more information about virtual hosting.
The Host Container for more information about the underlying xml configuration of virtual hosts and description of attributes.

The Tomcat Host Manager application is a part of Tomcat installation, by default available using the following context: /host-manager. You can use the host manager in the following ways:

Utilizing the graphical user interface, accessible at: {server}:{port}/host-manager/html.
Utilizing a set of minimal HTTP requests suitable for scripting. You can access this mode at: {server}:{port}/host-manager/text.

Both ways enable you to add, remove, start, and stop virtual hosts. Changes may be presisted by using the persist command. This document focuses on the text interface. For further information about the graphical interface, see Host Manager App – HTML Interface.
Configuring Manager Application Access

The description below uses $CATALINA_HOME to refer the base Tomcat directory. It is the directory in which you installed Tomcat, for example C:\tomcat8, or /usr/share/tomcat8.

The Host Manager application requires a user with one of the following roles:

admin-gui - use this role for the graphical web interface.
admin-script - use this role for the scripting web interface.

To enable access to the text interface of the Host Manager application, either grant your Tomcat user the appropriate role, or create a new one with the correct role. For example, open ${CATALINA_BASE}/conf/tomcat-users.xml and enter the following:

No further settings is needed. When you now access {server}:{port}/host-manager/text/${COMMAND},you are able to log in with the created credentials. For example:

$ curl -u USERNAME:{USERNAME}:USERNAME:{PASSWORD} http://localhost:8080/host-manager/text/list
OK - Listed hosts
localhost:

Note that in case you retrieve your users using the DataSourceRealm, JDBCRealm, or JNDIRealm mechanism, add the appropriate role in the database or the directory server respectively.
List of Commands

The following commands are supported:

list
add
remove
start
stop
persist

In the following subsections, the username and password is assumed to be test:test. For your environment, use credentials created in the previous sections.
List command

Use the list command to see the available virtual hosts on your Tomcat instance.

Example command:
curl -u test:test http://localhost:8080/host-manager/text/list

Example response:

OK - Listed hosts
localhost:

Add command

Use the add command to add a new virtual host. Parameters used for the add command:

String name: Name of the virtual host. REQUIRED
String aliases: Aliases for your virtual host.
String appBase: Base path for the application that will be served by this virtual host. Provide relative or absolute path.
Boolean manager: If true, the Manager app is added to the virtual host. You can access it with the /manager context.
Boolean autoDeploy: If true, Tomcat automatically redeploys applications placed in the appBase directory.
Boolean deployOnStartup: If true, Tomcat automatically deploys applications placed in the appBase directory on startup.
Boolean deployXML: If true, the /META-INF/context.xml file is read and used by Tomcat.
Boolean copyXML: If true, Tomcat copies /META-INF/context.xml file and uses the original copy regardless of updates to the application's /META-INF/context.xml file.

Example command:

curl -u test:test http://localhost:8080/host-manager/text/add?name=www.awesomeserver.com&aliases=awesomeserver.com&appBase/mnt/appDir&deployOnStartup=true

Example response:

add: Adding host [www.awesomeserver.com]

Remove command

Use the remove command to remove a virtual host. Parameters used for the remove command:

String name: Name of the virtual host to be removed. REQUIRED

Example command:

curl -u test:test http://localhost:8080/host-manager/text/remove?name=www.awesomeserver.com

Example response:

remove: Removing host [www.awesomeserver.com]

Start command

Use the start command to start a virtual host. Parameters used for the start command:

String name: Name of the virtual host to be started. REQUIRED

Example command:

curl -u test:test http://localhost:8080/host-manager/text/start?name=www.awesomeserver.com

Example response:

OK - Host www.awesomeserver.com started

Stop command

Use the stop command to stop a virtual host. Parameters used for the stop command:

String name: Name of the virtual host to be stopped. REQUIRED

Example command:

curl -u test:test http://localhost:8080/host-manager/text/stop?name=www.awesomeserver.com

Example response:

OK - Host www.awesomeserver.com stopped

Persist command

Use the persist command to persist a virtual host into server.xml. Parameters used for the persist command:

String name: Name of the virtual host to be persist. REQUIRED

This functionality is disabled by default. To enable this option, you must configure the StoreConfigLifecycleListener listener first. To do so, add the following listener to your server.xml:

Example command:

curl -u test:test http://localhost:8080/host-manager/text/persist?name=www.awesomeserver.com

Example response:

OK - Configuration persisted

Example manual entry:

Copyright © 1999-2020, The Apache Software Foundation

代码新增报错:ERROR: Exception in ASGI application + Exception Group Traceback (most recent call last): | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 426, in run_asgi | result = await app( # type: ignore[func-returns-value] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__ | return await self.app(scope, receive, send) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ | await super().__call__(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\applications.py", line 123, in __call__ | await self.middleware_stack(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ | await self.app(scope, receive, _send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\exceptions.py", line 65, in __call__ | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 756, in __call__ | await self.middleware_stack(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 776, in app | await route.handle(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 297, in handle | await self.app(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 77, in app | await wrap_app_handling_exceptions(app, request)(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 75, in app | await response(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 258, in __call__ | async with anyio.create_task_group() as task_group: | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 772, in __aexit__ | raise BaseExceptionGroup( | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Traceback (most recent call last): | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 261, in wrap | await func() | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 250, in stream_response | async for chunk in self.body_iterator: | File "D:\code\iscp-app-aigc-ai\scm_agent\src\interface\roles\order\supply_manager_assistant_app_langgraph.py", line 71, in generator | async for chunk in graph.astream( | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\pregel\main.py", line 2883, in astream | async with AsyncPregelLoop( | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\pregel\_loop.py", line 1186, in __aenter__ | saved = await self.checkpointer.aget_tuple(self.checkpoint_config) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | AttributeError: 'LangGraphCheckpointer' object has no attribute 'aget_tuple'
09-24
接口代码如下:# !/usr/bin/env python # -*- coding: utf-8 -*- # 版权信息:华为技术有限公司,版本所有(C) 2025-2099 """ 功 能:供应链 SCM Agent -- interface/roles/order/supply_manager_assistant_app_langgraph-供应经理助手fastapi接口 """ import json import os import sys from time import time import uvicorn from aipaas.logger_factory import logger from fastapi import Request, FastAPI from fastapi.responses import StreamingResponse from langchain_core.messages import HumanMessage from infrastructure.auth_fastapi import SoaAuth from infrastructure.langfuse_telemetery.trace_langgraph import create_langfuse_callback from scm_agent.src.application.roles.order.supply_manager_assistant_graph.main_graph.graph import \ get_supply_manager_assistant_main_graph from scm_agent.src.common.agent_name import AgentName from scm_agent.src.common.constants import Status from scm_agent.src.infrastructures.agent_config_download.config_download import dowload_agent_config_langgraph from scm_agent.src.infrastructures.agent_config_read.read_yaml_config import read_project_config from scm_agent.src.infrastructures.agent_state.agent_state_helper import get_redis_key from scm_agent.src.infrastructures.app_postprocess.output_process import str_to_output_json from scm_agent.src.infrastructures.app_postprocess.output_process import str_to_stream_output_langgraph from scm_agent.src.infrastructures.memory.postgre_checkpointer.postgre_checkpointer import FrameworkAdapter from scm_agent.src.infrastructures.read_config import app_config from scm_agent.src.interface.input_output_parameters import SupplyManagerAssistantChatInput, ConfigUpdateInput, \ ConfigUpdateOutput os.environ['NO_PROXY'] = '127.0.0.1,localhost' fastapi_app = FastAPI(lifespan=FrameworkAdapter.lifespan_wrapper) env = os.environ.get("env") soa = SoaAuth(env_type=env, skip_soa_auth=False, only_check_token=True) agent_name = AgentName.SupplyManagerAssistantLangGraph project_config = {} common_prompt_config = {} def preload_agent_config(name): """ 预加载agent配置 Args: name: 助手/技能名称,app_config中配置 """ global project_config global common_prompt_config dowload_agent_config_langgraph(name) # 读取项目配置文件 project_config = read_project_config(agent_name, f"{agent_name}.yaml").get(env) # 读取公共Prompt配置文件 common_prompt_config = read_project_config("common", "prompt_config.yaml") if 'PYCHARM_HOSTED' in os.environ or 'PYCHARM_DEBUG_PROCESS' in os.environ: logger.info("debug模式请在此打断点") # raise Exception("debug模式请在此打断点,注释此行即可") preload_agent_config(agent_name) async def generator(graph, supply_manager_assistant_chat_input, initial_state, config): yield str_to_stream_output_langgraph('<think>') yield str_to_stream_output_langgraph('**问题**') question = supply_manager_assistant_chat_input.question.strip() yield str_to_stream_output_langgraph('\n' + question) async for chunk in graph.astream( input=initial_state, stream_mode="custom", config=config, subgraphs=True ): yield str_to_stream_output_langgraph(chunk[1]) @fastapi_app.post('/roles/supply_manager_assistant_chat_langgraph') @soa.required async def supply_manager_assistant_chat(request: Request, supply_manager_assistant_chat_input: SupplyManagerAssistantChatInput): # checkpointer = presit_param.get("checkpointer") checkpointer = request.app.state.presist_param.get("checkpointer") thread_id = get_redis_key(supply_manager_assistant_chat_input) user_id = supply_manager_assistant_chat_input.user_id session_id = supply_manager_assistant_chat_input.session_id langfuse_callback = create_langfuse_callback(user_id=user_id, session_id=session_id, trace_name=AgentName.SupplyManagerAssistantLangGraph) config = {"configurable": {"thread_id": thread_id}, "metadata": {"user_id": supply_manager_assistant_chat_input.user_id, "project_config": project_config, "common_prompt_config": common_prompt_config, "ctx_params": supply_manager_assistant_chat_input.ctxParams}, "callbacks": [langfuse_callback], } try: graph = get_supply_manager_assistant_main_graph(checkpointer) initial_state = {"messages": [HumanMessage(content=supply_manager_assistant_chat_input.question)]} return StreamingResponse( generator(graph, supply_manager_assistant_chat_input, initial_state, config), media_type="text/event-stream", headers={"Cache-Control": "no-cache", "Connection": "keep-alive"} ) except Exception as e: return str_to_output_json(f'处理异常,异常原因: {e}') @fastapi_app.post('/config_update') @soa.required async def config_update(request: Request, config_update_input: ConfigUpdateInput): start_time = time() config_update_output = ConfigUpdateOutput() try: preload_agent_config(config_update_input.agent_name) config_update_output.status = Status.SUCCESS except Exception as e: config_update_output.error_message = "[SCM-Agent] Update config error." # 耗时统计 config_update_output.elapsed_time = str(time() - start_time) return config_update_output.to_dict() @fastapi_app.get('/health') @soa.required async def health(request: Request, ): return json.dumps({"success": True}, ensure_ascii=False) if __name__ == '__main__': uvicorn.run("supply_manager_assistant_app_langgraph:fastapi_app", host=app_config.get('host', '0.0.0.0'), # port=app_config.get('port', 8080), loop="asyncio", port=8080) # workers=app_config.get('workers', 4)) postgre_checkpointer.py目前没问题了,但是现在接口代码报错如下:ERROR: Exception in ASGI application + Exception Group Traceback (most recent call last): | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 426, in run_asgi | result = await app( # type: ignore[func-returns-value] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__ | return await self.app(scope, receive, send) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ | await super().__call__(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\applications.py", line 123, in __call__ | await self.middleware_stack(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ | await self.app(scope, receive, _send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\exceptions.py", line 65, in __call__ | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 756, in __call__ | await self.middleware_stack(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 776, in app | await route.handle(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 297, in handle | await self.app(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 77, in app | await wrap_app_handling_exceptions(app, request)(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app | raise exc | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app | await app(scope, receive, sender) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 75, in app | await response(scope, receive, send) | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 258, in __call__ | async with anyio.create_task_group() as task_group: | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\anyio\_backends\_asyncio.py", line 772, in __aexit__ | raise BaseExceptionGroup( | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Traceback (most recent call last): | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 261, in wrap | await func() | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\responses.py", line 250, in stream_response | async for chunk in self.body_iterator: | File "D:\code\iscp-app-aigc-ai\scm_agent\src\interface\roles\order\supply_manager_assistant_app_langgraph.py", line 71, in generator | async for chunk in graph.astream( | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\pregel\main.py", line 2883, in astream | async with AsyncPregelLoop( | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\pregel\_loop.py", line 1186, in __aenter__ | saved = await self.checkpointer.aget_tuple(self.checkpoint_config) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\checkpoint\postgres\aio.py", line 192, in aget_tuple | async with self._cursor() as cur: | File "C:\Users\zwx1453293\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 204, in __aenter__ | return await anext(self.gen) | ^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\langgraph\checkpoint\postgres\aio.py", line 388, in _cursor | async with conn.cursor(binary=True, row_factory=dict_row) as cur: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\psycopg\connection_async.py", line 256, in cursor | self._check_connection_ok() | File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\psycopg\_connection_base.py", line 528, in _check_connection_ok | raise e.OperationalError("the connection is closed") | psycopg.OperationalError: the connection is closed +------------------------------------ 之前接口代码是没问题的
09-25
代码直接报错:INFO: 127.0.0.1:52888 - "POST /roles/supply_manager_assistant_chat_langgraph HTTP/1.1" 500 Internal Server Error ERROR: Exception in ASGI application Traceback (most recent call last): File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 426, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__ return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ await super().__call__(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\applications.py", line 123, in __call__ await self.middleware_stack(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ raise exc File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ await self.app(scope, receive, _send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\middleware\exceptions.py", line 65, in __call__ await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 756, in __call__ await self.middleware_stack(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 776, in app await route.handle(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 297, in handle await self.app(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\starlette\routing.py", line 72, in app response = await func(request) ^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\fastapi\routing.py", line 278, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\.venv\Lib\site-packages\fastapi\routing.py", line 191, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\infrastructure\auth_fastapi.py", line 61, in decorator response = await func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\scm_agent\src\interface\roles\order\supply_manager_assistant_app_langgraph.py", line 87, in supply_manager_assistant_chat checkpointer = await get_checkpointer_singleton().get_checkpointer() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\iscp-app-aigc-ai\scm_agent\src\infrastructures\memory\postgre_checkpointer\postgre_checkpointer.py", line 81, in get_checkpointer await self.initialize() File "D:\code\iscp-app-aigc-ai\scm_agent\src\infrastructures\memory\postgre_checkpointer\postgre_checkpointer.py", line 73, in initialize await self.checkpointer.setup() # 创建表等初始化操作 ^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_AsyncGeneratorContextManager' object has no attribute 'setup'
09-24
### Tomcat 10 Manager Application Documentation and Usage The Manager application provided with Apache Tomcat offers web-based management capabilities for the server, allowing administrators to deploy, undeploy, start, stop, and reload applications without restarting the entire container[^1]. For Tomcat 10 specifically: - **Access**: By default, access is restricted to users who have been granted a role of `manager-gui`, `manager-script`, or both within the `tomcat-users.xml` configuration file. - **Deployment**: Applications can be deployed using WAR files uploaded through the interface or by specifying URLs pointing directly to remote resources. - **Operations**: - To list all installed applications on this virtual host, use `/list`. - Deploy an application from a URL via `/deploy?war={URL}&path=/exampleApp`. - Undeploy/remove an existing application with `/undeploy?path=/exampleApp`. For security reasons, it's important that only trusted individuals are given these roles due to their powerful nature over your deployment environment. Additionally, when configuring Java options such as heap size settings mentioned elsewhere, ensure they align well enough not just performance-wise but also considering how much memory each operation might consume during deployments or other tasks performed under manager app supervision[^2]. ```bash curl --user admin:password http://localhost:8080/manager/text/list ``` This command lists out currently running apps along with some basic information about them like state (running/stopped), context path etc., which could prove useful while managing multiple services hosted inside one instance of Tomcat.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值