• Serverless 解惑——函数计算如何安装字体


    前言

    首先介绍下在本文出现的几个比较重要的概念:

    函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考 Fun:Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

    备注: 本文介绍的技巧需要 Fun 版本大于等于 3.6.7。

    函数计算运行环境中内置一些常用字体,但仍不满足部分用户的需求。如果应用中需要使用其它字体,需要走很多弯路。本文将介绍如何通过 Fun 工具将自定义字体部署到函数计算,并正确的在应用中被引用。

    你需要做什么

    1. 在代码(CodeUri)目录新建一个 fonts 目录;

    2. 将字体复制到 fonts 目录;

    3. 使用 fun deploy 进行部署。

    工具安装

    建议直接从这里下载二进制可执行程序,解压后即可直接使用。下载地址

    执行 fun --version 检查 Fun 是否安装成功。

    $ fun --version
    3.6.7
    

    示例

    demo 涉及的代码,托管在 github 上。项目目录结构如下:

    $ tree -L -a 1
    
    ├── index.js
    ├── package.json
    └── template.yml
    

    index.js 中代码:

    'use strict';
    ​
    var fontList = require('font-list')
    ​
    module.exports.handler = async function (request, response, context) {
     response.setStatusCode(200);
     response.setHeader('content-type', 'application/json');
     response.send(JSON.stringify(await fontList.getFonts(), null, 4));
    };
    

    index.js 中借助 node 包 font-list 列出系统上可用的字体。

    template.yml:

    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
      fonts-service: # 服务名
        Type: 'Aliyun::Serverless::Service'
        Properties:
          Description: fonts example
        fonts-function: # 函数名
          Type: 'Aliyun::Serverless::Function'
          Properties:
            Handler: index.handler
            Runtime: nodejs8
            CodeUri: ./
            InstanceConcurrency: 10
          Events:
            http-test:
              Type: HTTP
              Properties:
                AuthType: ANONYMOUS
                Methods:
                  - GET
                  - POST
                  - PUT
    
      tmp_domain: # 临时域名
        Type: 'Aliyun::Serverless::CustomDomain'
        Properties:
          DomainName: Auto
          Protocol: HTTP
          RouteConfig:
            Routes:
              /:
                ServiceName: fonts-service
                FunctionName: fonts-function
    

    template.yml 中定义了名为 fonts-service 的服务,此服务下定义一个名为 fonts-function 的 http trigger 函数。tmp_domain 中配置自定义域名中路径(/)与函数(fonts-service/fonts-function)的映射关系。

    1. 下载字体

    你可以通过这里下载自定义字体 Hack,然后复制字体到 fonts 目录。

    此时 demo 目录结构如下:

    $ tree -L 2 -a
    ​
    ├── fonts(+)
    │   ├── Hack-Bold.ttf
    │   ├── Hack-BoldItalic.ttf
    │   ├── Hack-Italic.ttf
    │   └── Hack-Regular.ttf
    ├── index.js
    ├── package.json
    └── template.yml
    

    2. 安装依赖

    $ npm install
    

    3. 部署到函数计算

    可以通过 fun deploy 直接发布到远端。

    4. 预览线上效果

    fun deploy 部署过程中,会为此函数生成有时效性的临时域名:

    打开浏览器,输入临时域名并回车:

    可以看到字体 Hack 已生效!!!

    原理介绍:

    1. fun deploy 时,如果检测到 CodeUri 下面有 fonts 目录,则为用户在 CodeUri 目录生成一个 .fonts.conf 配置文件。在该配置中,相比于原来的 /etc/fonts/fonts.conf 配置,添加了 /code/fonts 作为字体目录。

    2. 自动在 template.yml 中添加环境变量,FONTCONFIG_FILE = /code/.fonts.conf,这样在函数运行时就可以正确的读取到自定义字体目录。

    如果依赖过大,超过函数计算的限制(50M)则:

    1. 将 fonts 目录添加到 .nas.yml;

    2. 将 fonts 对 nas 的映射目录追加到 .fonts.conf 配置。

    fun deploy 对大依赖的支持可参考《开发函数计算的正确姿势——轻松解决大依赖部署》

    总结

    你只需要在代码(CodeUri)目录新建一个 fonts 目录,然后复制所有字体到该目录即可。Fun 会自动帮你处理配置文件(.fonts.conf),环境变量以及大依赖场景的情况。如果大家在使用 Fun 的过程中遇到了一些问题,可以在 github 上提 issue,或者加入我们的钉钉群进行反馈(钉钉搜索群号 11721331 即可进群)。

  • 相关阅读:
    安卓组件service
    安卓组件-BroadcastReceiver
    【bug】java.lang.NoSuchMethodError: android.widget.TextView.setBackground
    【转】安卓毛玻璃效果
    INSTALL_FAILED_UPDATE_INCOMPATIBLE
    安卓 异步线程更新Ui
    OC语言-03-OC语言-三大特性
    OC语言-02-OC语言-基础知识
    OC语言-01-面向过程与面向对象思想
    C语言-07-预处理、typedef、static和extern
  • 原文地址:https://www.cnblogs.com/Serverless/p/14134500.html
Copyright © 2020-2023  润新知