问题描述

部署在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. 【JS 逆向百例】DOM事件断点调试,某商盟登录逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:某商盟登录 ...

  2. 最新 Hugging Face 强化学习课程(中文版)来啦!

    人工智能中最引人入胜的话题莫过于深度强化学习 (Deep Reinforcement Learning) 了,我们在 2022 年 12 月 5 日开启了<深度强化学习课程 v2.0>的课 ...

  3. 基于知识图谱的电影知识问答系统:训练TF-IDF 向量算法和朴素贝叶斯分类器、在 Neo4j 中查询

    基于知识图谱的电影知识问答系统:训练TF-IDF 向量算法和朴素贝叶斯分类器.在 Neo4j 中查询 1.项目介绍 训练 TF-IDF 向量算法和朴素贝叶斯分类器,预测用户文本所属的问题类别 使用分词 ...

  4. 解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致

    问题:生成pdf时文献应用会乱序 引用bib格式的参考文献时,会这么写: \bibliographystyle{plain} \bibliography{%filename%.bib} 而plain的 ...

  5. [转发]MySQL安装配置教程(超级详细、保姆级)

    MySQL安装配置教程(超级详细.保姆级)_SoloVersion的博客-CSDN博客_mysql安装配置教程一. 下载MySQLMysql官网下载地址https://downloads.mysql. ...

  6. 设计模式-1 单例模式 SingletonPattern

    23种设计模式 一.创建型 1,AbstractFactory(抽象工厂,对象模式) 2,Builder(建造者,对象模式) 3,Factory Method(工厂方法,类创模式) 4,Prototy ...

  7. d3d12龙书阅读----数学基础 向量代数、矩阵代数、变换

    d3d12龙书阅读----数学基础 向量代数.矩阵代数.变换 directx 采用左手坐标系 点积与叉积 点积与叉积的正交化 使用点积进行正交化 使用叉积进行正交化 矩阵与矩阵乘法 转置矩阵 单位矩阵 ...

  8. React axios 使用 http-proxy-middleware 解决跨域问题小记

    壹 ❀ 引 在上篇bug分析的记录文中,提到axios可做到取消接口请求,所以想写一篇关于axios.CancelToken使用以及原理分析的文章(主要是自己好奇到底如何做到的取消).在准备工作阶段, ...

  9. 从零开始的react入门教程(九),react context上下文详解,可能有点啰嗦,但很想让你懂

    壹 ❀ 引 我在从零开始的react入门教程(八),redux起源与基础用法一文中,介绍了redux的前辈Flux,以及redux关于单项数据更新的基本用法.我们在前文提到,相对Flux支持多个sto ...

  10. JS script脚本async和defer的区别

    壹 ❀ 引 我在 google recaptcha 谷歌人机身份验证使用教程 一文中有引用这样一段外部资源代码,如下: <script src="https://www.google. ...