问题描述

部署在App Service for Linux环境中的Web App。出现了字体文件缺失的问题,页面显示本来时中文的地方,区别变为方框占位。

问题分析

在应用中,通常涉及到显示问题的有两个方面,

一是乱码:”����Ҫ�¨²�ѧϰ������“ , ”由月è¦�å¥½å¥½å­¦ä¹ å¤å¤å�‘上“ ,”鐢辨湀瑕佸ソ濂藉涔犲ぉ澶╁悜涓?“ ”锟斤拷锟斤拷要锟“  , 这些内容表示的问题就是编码问题。

二是字体缺失:表现形式为用“□”方框来作为占位符。

对于第一个问题,我们可以通过应用配置来修改字符编码问题(可以参考文章:https://www.cnblogs.com/lulight/p/13531483.html)。而字体缺失,则可以通过下面的方式来验证。

第一步:通过App Service Kudu站点的SSH进入Linux,查看是否已经安装了TTF-DEJAVU文件 cd /usr/share/fonts/ttf-dejavu/

第二步:如果没有ttf-dejavu文件,就需要通过 apk --no-cache add ttf-dejavu 安装,然后使用cp命令把缺少的TTF文件复制到 /usr/share/fonts/ttf-dejavu/ 目录下

apk --no-cache add ttf-dejavu
cp /home/site/SIMHEI.TTF /usr/share/fonts/ttf-dejavu/SIMHEI.TTF ##PS: 比如SIMHEI.TTF文件已经保存在 home/site文件中

问题解决

在App Service for Linux中,可以通过启动脚本方式(Stratup Script)来初始化字体文件。详细步骤为:

1) 新建一个startup_script.sh 文件,内容为:

apk --no-cache add ttf-dejavu

cp /home/site/SIMHEI.TTF /usr/share/fonts/ttf-dejavu/SIMHEI.TTF

:需要把SIMHEI.TTF 文件上传到app service 的  home/site/目录中。

2)把文件放置在home/site目录下,如:/home/site/deployments/tools/startup_script.sh,可以通过FTP方式上传文件,或者直接包含在应用的项目文件中,路径可以自定义,只要在/Home/下就可以。

3)把第一步中脚本所在的路径,设置在启动路径中。重启站点即可解决问题。

修改完成后,正确的显示:

附录一:如果单独进入App Service SSH, 安装字体后,当实例发生重启,切换等都会导致之前的安装失效,所以如果要永久解决字体问题,还是需要在启动脚本中安装字体文件。

安装字体文件的脚本为:

#! /usr/bin/bash
cd /home/site/wwwroot/
if [ -f fonts.tar.gz ]; then
echo '=============================================='
echo 'install fonts......'
echo '=============================================='
tar -zxf fonts.tar.gz
cp fonts/* /usr/share/fonts
cd /usr/share/fonts/
mkfontscale && mkfontdir && fc-cache
cd /home/site/wwwroot/
fi

参考资料

配置Java应用(第六步):https://docs.azure.cn/zh-cn/app-service/configure-language-java?pivots=platform-linux#finalize-configuration-1

What are the expected values for the Startup File section when I configure the runtime stackhttps://docs.microsoft.com/en-us/troubleshoot/azure/general/faqs-app-service-linux#what-are-the-expected-values-for-the-startup-file-section-when-i-configure-the-runtime-stack-

【Azure 应用服务】App Service for Linux环境中,如何解决字体文件缺失的情况的更多相关文章

  1. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  2. 【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?

    问题描述 当创建一个App Service 后,运行时环境和版本选择Windows 和 Python 3.6. 登录Kudu 站点查看,默认的文件有 web.config, hostingstart- ...

  3. 【事件中心 Azure Event Hub】在Linux环境中(Ubuntu)安装Logstash的简易步骤及配置连接到Event Hub

    在文章([事件中心 Azure Event Hub]使用Logstash消费EventHub中的event时遇见的几种异常(TimeoutException, ReceiverDisconnected ...

  4. 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php

    问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...

  5. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤

    问题描述 实现部署NodeJS Express应用在App Service Linux环境中,并且使用Microsoft Authentication  Library(MSAL)来实现登录Azure ...

  6. 【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)

    问题描述 使用 python websockets 模块作为Socket的服务端,发布到App Service for Linux环境后,发现Docker Container无法启动.错误消息为: 2 ...

  7. 【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))

    问题情形 当应用在Azure 应用服务App Service中运行时,有时候出现CPU,Memory很高,但是没有明显的5XX错误和异常日志,有时就是有异常但是也不能明确的指出具体的代码错误.当面临这 ...

  8. 【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志

    问题描述 在App Service For Windows的环境中,我们可以通过ArmClient 工具发送POST请求在Web应用的实例中抓取网络日志,但是在App Service For Linu ...

  9. 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https

    问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...

  10. 【Azure 应用服务】部署Jar到App Service for Linux,因启动命令路径配置错误而引起:( Application Error 问题

    问题描述 App Service for Linux 资源创建完成后,通过FTP方式把 .jar包(logdemo.jar)包上传到 /site/wwwroot/ 文件夹后,在App Service的 ...

随机推荐

  1. 使用rpmbuild打包erlang和rabbitmq进行部署服务的方法

    使用rpmbuild打包erlang和rabbitmq进行部署服务的方法 背景说明 1. rabbitmq 是基于 erlang 开发的消息列队, 本身rabbitmq 自己不区分架构. 2. 但是e ...

  2. How to Use Github

    C:\Windows\System32\drivers\etc\hosts 在最后加上一句 20.205.243.166 github.com 从 https://ping.chinaz.com/ 来 ...

  3. vue3.2新增指令v-memo的使用

    v-memo的讲解 vue3.2中新增了一个性能优化的指令: 这个指令就是v-memo; v-memo:可以做性能优化,v-memo中值若不发生变化,整个子树的更新会被跳过. <div v-me ...

  4. vue数据更新后在视图上不响应

    一.vue如何追踪变化 当你把一个普通的JS对象传给vue实例的data选项时, vue将遍历此对象的所有属性, 并使用 Object.defineProperty 把这些属性全部转为 getter/ ...

  5. 1.9 动态解密ShellCode反弹

    动态解密执行技术可以对抗杀软的磁盘特征查杀.其原理是将程序代码段中的代码进行加密,然后将加密后的代码回写到原始位置.当程序运行时,将动态解密加密代码,并将解密后的代码回写到原始位置,从而实现内存加载. ...

  6. centOS系统 迁移docker镜像及数据文件到指定目录

    话说我今天正在快乐的敲代码,突然看到IDE报警磁盘空间不足了,du -h 查看了一下磁盘占用情况,发现是自己的docker镜像全部放/var/lib/docker目录下 这个系统磁盘给根目录只分配了5 ...

  7. 哈希表(HashMap)与字符串哈希

    哈希表 哈希表是一种通过映射来快速查找的数据结构.其通过键值对(key-value)来存储.一个数据通过哈希函数的运算来生成一个属于他自己的键值,尔后将其与键值绑定.当我们想查找这个数据时,就可以直接 ...

  8. drawio画图软件使用入门

    drawio是一个画图软件,擅长处理流程图,可以替换visio用来画流程图,也可以编辑visio文件. 体验地址:https://app.diagrams.net/ 截图如下: 可以直接使用在线版本, ...

  9. TDD学习笔记(二)单元测试

    单元测试 定义 单元测试最早来源于Kent Beck,他在开发SmallTalk中引入了这个概念,随着软件工程学的不断发展,使得单元测试已经成为软件编程中一项非常有用的实践. 在维基百科中," ...

  10. NC210520 Min酱要旅行

    题目链接 题目 题目描述 从前有个富帅叫做Min酱,他很喜欢出门旅行,每次出门旅行,他会准备很大一个包裹以及一大堆东西,然后尝试各种方案去塞满它. 然而每次出门前,Min酱都会有个小小的烦恼.众所周知 ...