——可通过目录快速定位——
一、线上已知问题总结、排查思路和注意事项
1、页面或者碎片(Fragment)发布后访问没有生效
首先去Splunk日志里面查看,是否在对应时间段有对应页面的提交记录,如下图:
其中上方两个红框中,左侧为对应环境的id(DEV:196277;QA: 196278; STAGING: 210971; Prod: 210970);右侧红框为路径,默认现在的就是整个Helix全路径,所有页面/Fragment匹配,所以如果不需要精确匹配则不需要修改;下方红框即为当前提交的页面地址。
解决方式:如果对应提交时间段确定没有查到对应的日志记录,那么说明当前Adobe AEM中的发布没有触发回调,这个问题是已知问题,只能等待并稍后重试发布,后续会针对这块逐步进行优化。
对应日志的查询地址:
页面:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D210970%20aem_tier%3Dauthor%20%22handleEvent%20Replication%20action%22%20%22%2Fcontent%2Faem-cms-2-0%2F%22&display.page.search.mode=smart&dispatch.sample_ratio=1&earliest=-24h%40h&latest=now&display.prefs.events.count=50&display.events.maxLines=0&sid=1758809345.691448_10FE1E57-9B5A-4368-93D6-DF6940076B23
Fragment:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D210970%20aem_tier%3Dauthor%20%22handleEvent%20Replication%20action%22%20%22%2Fcontent%2Fexperience-fragments%2Faem-xf-2-0%2F%22&display.page.search.mode=smart&dispatch.sample_ratio=1&earliest=-24h%40h&latest=now&display.prefs.events.count=50&display.events.maxLines=0&sid=1758795816.710163_66A45140-F786-4FA5-BDB2-46004C61B06B
临时手动处理推送
>>>>>>>>>>>>>20251015更新:可以直接使用后台接口去进行推送,参考第9条<<<<<<<<<<<<<<<<<<<<
①POSTMAN导入以下调用:
②测试环境(SITA、UAT、PRE)
直接替换对应环境的这里sourceUrl为当前页面的URI,然后调用即可:

③生产环境
首先APIH_token中点击send申请token:

复制access_token里面的内容(注意这里最好把返回的body通过json转换,这样便于完整选择并复制access_token)至接口的Authentication:

然后同样修改对应sourceUri,最后点击send即可:

即可完成手动推送。
如果这里存在记录,则可以登录NUWA Admin后台查看是否已经存在路由:

解决方式:如果有记录,没有办法访问,则可以联系fanlf3协助进行排查;如果后台没有记录,那说明没有入库成功或者是推送失败则可以查看下一步排查思路,。
如果上一步中没有记录,则可以排查接口推送是否成功,同样splunk日志中查看:

查看日志中是否存在提交,并且得到了接口返回,其中sourceUrl就是当前页面/Fragment的路径
日志查询地址:https://itsi.lenovo.com/en-US/app/search/search?q=search%20index%3D%22aem*%22%20aem_env_id%3D196278%20aem_tier%3Dauthor%20%22HelixPushRouterService%22&display.page.search.mode=smart&dispatch.sample_ratio=1&earliest=-24h%40h&latest=now&display.prefs.events.count=50&display.events.maxLines=0&sid=1758852342.710022_10FE1E57-9B5A-4368-93D6-DF6940076B23
2、环境对应关系
Adobe AEM的与NUWA环境整体关联对应关系:
3、页面请求链路
以NUWA SitA环境为例大致如下,其他环境地址不一样,逻辑一样

总体剖析来看,路径从外到内就是以下步骤:
4、Fragment请求链路(临时)
Fragment的list也是通过HybridControl进行转发调用的,NUWA admin里面通过hybridControl调用AEM的Author fragment list:https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/nexus/getFragListServlet.json 获取AEM的fragment路径。
然后NUWA CMS装修页根据拿到的list进行搜索展示后,可拖入页面中使用,访问流程就是下图所示:

请求步骤路径大致如下:
| 步骤 | 路径 |
|---|---|
| 大前端nginx捕获 | /aem_fragments/public/en/mt-style-guide |
| 后端docker转发代理服务接口 | http://ofp-hybrid-control.docker-ofp-uat.lefile.cn/forward/getFragContent?path=/aem_fragments/public/en/mt-style-guide |
| AEM后端服务接口 | https://publish-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/nexus/getFragmentContentServlet.json?path=/content/experience-fragments/aem-xf-2-0/en/public/en/mt-style-guide |
5、权限申请
5.1 Adobe AEM相关权限申请
Alisa姐:chenhh7
涉及所有关于Adobe侧的权限(splunk、git、Experience manager、author等等)
5.2 Flash相关权限申请
5.2.1 日志平台、服务器权限
yuanming:fupz2、minym1
涉及所有关于开发的运维平台,比如日志、服务器等等。
5.2.2 Admin后台
leilian1,lill25,menggq2,fupc2,yinkl1
所有涉及Admin后台的权限,比如登录、接口、菜单等等。
申请权限如果需要提Jira ticket,可参考:
ECOPS-16696
-
Getting issue details...
STATUS

如果需要经理审批,可联系睿哥xierui1进行留言。
6、接口网关调用认证关系
6.1 Adobe AEM调用NUWA
AEM侧调用NUWA的接口,目前对接了APIM(WSO2)和APIH两个网关平台,通过将NUWA内网的HybridControl接口注册到网关平台,然后将接口内容进行返回。
目前除了生产由于APIH的白名单限制导致没法获取token,因此使用了APIM,其他环境均使用APIH接口,通过参数:helixDefaultFlashAuthInterfaceSwitch 配置,1为APIM(WSO2);2为APIH

APIH攻略:APIH接口信息汇总
APIH测试后台地址:https://apih-test.lenovo.com/
APIH生产后台地址:https://apih.lenovo.com/home
APIM攻略:WSO2快速发布接入指南
APIM后台地址:https://apih-test.lenovo.com/home (测试生产都在这上面配置)
6.2 NUWA调用Adobe AEM
相当于NUWA的admin后台服务,前端通过hybridControl服务中转调用AEM接口,在hybridControl中通过对接Adobe AEM Technical Account进行认证后,调用AEM Author接口获取数据。
注意:以上内容仅作了解参考,实际配置完毕后,不需要再去做设置,除非网关平台出现问题,这个情况算异常情况另行处理。
7、手动快速清理Dispatcher缓存工具
https://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/helix/clearDispatcher?urls=/exp-services/lenovo/helix/content.json/us/en/lorem-ipsum-hme.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-con-creat.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-dat-sci.html,/exp-services/lenovo/helix/content.json/us/en/eiusmod-tempor-ai/dolore-magna-dig-assist.htmlhttps://author-p44761-e210970.adobeaemcloud.com/exp-services/lenovo/helix/clearDispatcher?urls=/exp-services/lenovo/helix/content.json/us/en/index.html,/exp-services/lenovo/helix/content.json/us/en/ai.html,/exp-services/lenovo/helix/content.json/us/en/ai/content-creation.html,/exp-services/lenovo/helix/content.json/us/en/ai/data-science.html,/exp-services/lenovo/helix/content.json/us/en/ai/digital-assistants.html
从sprint-68之后,直接传对应uri即可,如:
urls后面跟需要清理Dispatcher的uri(带不带.html结尾均可),英文逗号分割
8、手动快速清理CDN缓存工具
http://rduwpesmsp4.lenovo.com/CCU-Purge-UI/akamaiPurge.pl
https://www.lenovo.com/us/en/ai
https://www.lenovo.com/us/en/ai/content-creation
https://www.lenovo.com/us/en/ai/data-science
https://www.lenovo.com/us/en/ai/digital-assistants
https://www.lenovo.com/us/en/
9、手动推送页面路由
该功能相当于直接手动触发了AEM发布页面后的回调动作
https://author-p44761-e196278.adobeaemcloud.com/exp-services/lenovo/helix/pagePublish?path=/content/aem-cms-2-0/na/us/public/en/mtest,/content/aem-cms-2-0/na/us/public/en/mtest
GET or POST皆可,根据环境改用对应的Author Domain即可
参数为实际访问节点的路径,如:/content/aem-cms-2-0/na/us/public/en/mtest
如果需要删除路由,可以直接追加type参数,参数值随意,如type=2,默认不带type是新增/保存页面路由
10、手动推送reserved url配置
# 新增 curl --location 'http://ofp-hybrid-control.docker-ofp-uat.lefile.cn/reserved/save' --header 'Content-Type: application/json' --data '["/test_reservedpage"]' # 删除 curl --location 'http://ofp-hybrid-control.docker-ofp-uat.lefile.cn/reserved/delete' --header 'Content-Type: application/json' --data '["/test_reservedpage"]'
11、新建站点的页面发布后访问404
①首先检查站点的最底层站点层级是否满足/region/country/site/language/page_uri的结构(默认是有自动更新的机制,如果没有或者有误,需要人工检查);
其中title对应国家(英文逗号分割),value对应region,保证这个映射即可

②去genericList发布region-list的映射:https://author-p44761-e210970.adobeaemcloud.com/generic-lists.html/etc/acs-commons/lists/lenovo/hybrid/structure

注意:如果新增了region和country关系,那么必须得发布该generic-list,否则publish节点还是读取不到最新的配置!
12、Affinity站点发布后没有清除缓存
①检查对应generic-list里面,是否配置了对应Affinity站点的groupCode关系
# 生产路径(其他环境改了对应domain即可) https://author-p44761-e210970.adobeaemcloud.com/mnt/overlay/acs-commons/components/utilities/genericlist.html?item=/etc/acs-commons/lists/lenovo/hybrid/structure/site-folder

②title对应affinity站点siteroot前缀,value对应groupcode(英文逗号分割)

维护完以后保存即可,这里不需要发布,因为这里的内容是在author下读取发布的。
13、index首页的导航头没有展示
解决方式:刷新页面的CDN
原因:新节点启动的时候,正好页面CDN缓存失效回源到该节点,此时如果调用导航接口返回的内容为空,那么会出现(后续将会逐渐进行优化)
二、本地问题汇总
1、MAC端本地在初步成功启动author(即:4502访问正常),在进行模板新建时,出现空白页无法编辑情况,参考9、问题及其他汇总 中添加环境变量,除 方法3 可直接解决外,其余添加环境变量方式均未解决。
问题点:增加环境变量(在.zshrc中添加), 重启author后,访问404,并且 9、问题及其他汇总 中 404解决方案也并未生效;
此时仅能访问configMgr页面,其余均不可以访问;并且此时使用 方法3 也并未解决;
若考虑将环境变量永久设置并且不考虑方法3,需要执行以下步骤,同时也建议在本地环境搭建的初始阶段,直接进行该设置(即:启动前完成环境变量配置):
(1)停掉当前的aem实例服务;
(2)删除author目录下的crx-quickstart文件夹;
(3)添加环境变量,具体看mac系统版本,新版本环境变量在 ~/.zshrc 下进行添加,以下为大概执行步骤及终端指令
a、编辑 ~/.zshrc:
nano ~/.zshrc
b、拉到最下边,添加如下环境变量:
# AEM Environment Variables
export AEM_EXTERNALIZER_LOCAL="http://localhost:4502"
export AEM_EXTERNALIZER_AUTHOR="http://localhost:4502"
export AEM_LENOVO_EXTERNALIZER_PUBLISH="http://localhost:4503"
c、保存并退出:
Ctrl+O → Enter → Ctrl+X
d、使配置立即生效并验证:
source ~/.zshrc
echo $AEM_EXTERNALIZER_LOCAL
echo $AEM_EXTERNALIZER_AUTHOR
echo $AEM_LENOVO_EXTERNALIZER_PUBLISH
(4)重启并进行验证,可以正常访问并操作;也可以查看configMgr页面,搜索“Day CQ Link Externalizer”,显示如下内容:

2、本地重启电脑后,再次启动author,页面访问404,查看error.log,提示缺少 $[env:slingMaxCallsNumber] ,再对该参数补充后,再次启动访问正常。
注:问题为代码改动,增加了默认值
env:slingMaxCallsNumber;default=1800
(1)日志打印如下:

(2)解决方案:在启动author前,设置环境变量(仅对当前终端窗口生效,其中1000仅为默认值)
export slingMaxCallsNumber=1800
(3)该参数解释:
slingMaxCallsNumber 及其对应的OSGi配置属性 sling.max.calls 是 Apache Sling框架中的一个重要安全机制。
核心作用:防止无限递归调用
它的主要目的是防止由于编程错误或恶意请求导致的无限递归调用,从而保护AEM服务器不会因此类错误而耗尽资源、崩溃或失去响应。
工作原理:
计数器:Sling框架会为每一个进入的HTTP请求(Sling Request)维护一个计数器。
计数递增:每当处理一个请求时,如果这个请求内部又通过Sling的机制(例如
sling.include、sling.forward或者通过RequestDispatcher的调用)发起了另一个对Sling资源的调用,这个计数器就会加1。阈值检查:在每次递增后,Sling会将当前计数值与配置的
sling.max.calls阈值进行比较。触发保护:如果计数值超过了
sling.max.calls的设定值,Sling会立即终止当前请求的处理,并向客户端返回一个500 Internal Server Error响应,同时在日志中记录一条错误信息,大致内容是 "Max call level has been exceeded"。
3、本地导航栏无法正常显示,flashHeaderService服务异常
注:问题为本地缺少参数配置,需访问 http://localhost:4502/system/console/configMgr 对如下服务的配置参数进行补充(基本与代码中的默认值保持一致)。
同时也可访问 http://localhost:4502/system/console/components ,查看涉及的服务状态是否为“active”,如果为fail查看具体报错日志,如下:

(1)在 flashHeaderServiceImpl 中有涉及lenovoApiEndpointService的调用,获取 flashHeaderDomainURL。 其中 lenovoApiEndpointService (com.lenovo.platform.core.services.impl.LenovoApiEndpointServiceImpl)服务异常,缺少如下配置:


Domain URL(for header/for footer):https://www.lenovo.com/
Endpoint URL(for header):/get_nav_api/site_common_frag/masthead/header.html
Endpoint URL(for footer):/get_nav_api/site_common_frag/footer/footer.html
(2)在 flashHeaderServiceImpl 中有涉及 lenovoNavigationService调用,并且 lenovoNavigationService服务异常,需修改如下配置:

4、本地测试问题修复-待修改配置列表
访问http://localhost:4502/system/console/configMgr 进行配置的修改
| 问题 | 服务名称 | 配置名称 | 值 | 备注 |
|---|---|---|---|---|
| 导航栏无法显示 | com.lenovo.platform.core.services.impl.LenovoApiEndpointServiceImpl | Request Timeout config for API calls | 30 | |
| Socket Timeout config for API calls | 30 | |||
| Connect Timeout config for API calls | 30 | |||
| numberofRetries | 3 | |||
| Lenovo Flash Domain URL | https://www.lenovo.com/ | |||
| Lenovo Flash Endpoint URL | /get_nav_api/site_common_frag/masthead/header.html | |||
| Lenovo Flash Domain URL | https://www.lenovo.com/ | |||
| Lenovo Flash Endpoint URL | /get_nav_api/site_common_frag/footer/footer.html | |||
| Request MaxTotal config for API calls | 500 | |||
| Request MaxPerRoute config for API calls | 100 | |||
| com.lenovo.platform.core.services.impl.LenovoNavigationServiceImpl | Flash Navigation Cache Duration | 300000 | ||
| Flash Navigation API Retry Count | 3 | |||
——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————
——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————
——————————————————提供两个一键启动脚本可供尝试(Beta阶段,有问题随时反馈):——————————————————
针对Windows下使用:
针对Mac下使用:
使用方式:
直接按照自己的操作系统分别把对应脚本放到自己的aem-author-p4502.jar的同级目录下,执行即可,如果不想放到一个目录,则把FALLBACK_AEM_DIR后面的路径替换成自己的即可。
如果没有配置过JAVA_HOME,那么需要把脚本中FALLBACK_JAVA_HOME后面的路径替换成自己的即可
三、项目熟悉
1、主要为当前代码模块划分及相关代码定位。
(1)模板相关:主要在 ui.content下
当前的page,“lenovo Helix Base Page”为基础,其他三个均继承base page实现(主要为模板相关的属性)

对应代码位置(lenovo-cms): 模板相关的的在ui.content下

查看lenovo-hybrid-base-template/.content.xml,可以看到base-template模板类型的指向

查看框架组件(base-page/initial/.content.xml),在不进行任何装修的情况下,最基本的组成,并且对应的组件在ui.apps下

(2)组件相关:主要在 ui.apps下。并且一般修改的是head.html

其中在head.html中,有一部分使用到java代码处理的逻辑,主要获取相关字段的取值。“data-sly-use” 是 Adobe Experience Manager (AEM) 中 Sightly (HTL) 模板语言的一个指令,用于在HTML中调用Java或JavaScript逻辑。

在PagePropertiesModel中,init()会初始化,完成页面属性的初始化赋值处理;
2、以 NEXUS-595(Base Template - SEO requirements MS1)为例,分析链路为 base-template => base-page => structure/page/v1/page => page.html => head.html
3、AEM与hybrid-control之间调用关系:
lenovo-platform/core/src/main/java/com/lenovo/hybrid/listeners/NexusPagePublishEventHandler.java
(1)aem进行publish操作,调用hybrid-control中 /router/save
source_url:aem上送过来的时候,会将public层级处理去掉(如:aem原始路径为/aem-cms-2-0/na/us/public/en/cs-helix-fiv,上送是为/aem-cms-2-0/na/us/en/cs-helix-fiv)
大致处理逻辑为:
a.path判断:只有当hybrid站点才进行后续处理步骤(配置为Nexus Configuration -》 SiteRoots)
b.调用helix-control:包含token校验、url的判断(主要为发布或取消发布时,调用的hybrid-control的api的调用)、请求体组装及调用(同时有重试机制)
c.当前为发布操作,则需刷新缓存
(2)aem进行unpublish操作,调用hybrid-control中 /router/delete
上一篇
Fusion接入备注下一篇
Helix页面结构