• Tips

    • 部署过程中的一些重点

      • releas配置信息
      	  [profile.release]
      	  opt-level = 3             # 最高优化级别
      	  lto = true                # 链接时优化
      	  codegen-units = 1         # 减少并行单元以提高优化
      	  panic = "abort"           # 遇到panic直接终止而不是展开堆栈
      	  strip = true              # 自动剥离符号信息
      
      • 交叉编译到x86架构(也可以通过Github的action来进行目标编译)
        1. 注意以下的配置信息要放在 .cargo/config.toml 文件中 toml [target.x86_64-unknown-linux-musl] linker = "x86_64-linux-musl-gcc"
        2. rustup target add x86_64-unknown-linux-musl
          • rustup target list --installed
            • 查看已经安装的编译目标,注意还有一个gnu版本的不要搞混,另外还有专用的更简单的cross工具用来处理交叉编译
            • cross会使用Docker容器来进行编译,避免链接器的各种问题
        3. cargo install cargo-xbuild
        4. brew install FiloSottile/musl-cross/musl-cross
        5. cargo build --release --target=x86_64-unknown-linux-musl
        6. du -sh ./target/x86_64-unknown-linux-musl/release/*
          • 用来查看最终生成的编译产物
      • 使用Makefile来归整所需文件和部署
        • 选择整个项目部署到以下路径/opt/your-app-name/
        • 使用rsync和Ai辅助,很容易就可以完成收集部署文件并同步到指定ip服务器的功能
          • --delete 删除命令,同步时会删除本地不存在但是服务器上存在的数据,所以如有必要,手动执行即可
          • rsync需要提前在服务器建立好指定的路径
      • 使用systemd来管理服务
        • systemd可以映射工作路径,在文件分散的情况下,也可以通过映射来符合程序设计的需求,通常是归整为正常工作的结构
        • 还可以记录标准输出到journald通用日志管理
          • journalctl -u your-service-name
            • 查看服务器的输出日志
        • 在systemd里配置环境变量RUST_LOG的级别为合适的状态
          • 通常为INFO级
          • Actix-web在默认的情况下是ERROR级
        • 配置方式:
          • /etc/systemd/system/my_rust_web.service
            • 文件存放位置
          • systemctl daemon-reload
            • 修改或添加服务文件后需要重启
          • systemctl start my_rust_web.service
          • systemctl enable my_rust_web.service
            • 开机启动
          • journalctl -u my_rust_web.servie
            • 查看日志
    • Route

      • 简单直观,使用声明式注解或方法链
      • 适合简单的HTTP端点,如CRUD操作
      • 代码量少,易于维护
      • 关注点在于请求参数的转换和响应生成
    • Service

      • 更灵活,可以控制请求处理的各个环节
      • 适合复杂业务逻辑或需要共享状态的情况
      • 可以实现请求预处理、拦截和自定义响应生成
      • 通常包含更多业务逻辑和状态管理
      • 可以作为一个可重用的组件封装
    • Arc

      • 关于Arc可以看成是对包裹对象的一个计数指针,而Oncelock是跟随内存周期,从实际的web应用上来看,Httpserver的Arc持有几乎就是和内存周期相同,当然,如果有跨HttpServer的共享数据的,则需要OnceLock,不过从另一个方面来看,全部HttpServer通过Arc持有也是一样的效果.
    • md文件转换html

      • 相对路径的问题(文件用相对,请求用绝对)
        • 代码中针对本地文件系统时
          • /static/file.md是绝对路径
          • static/file.md是相对路径
        • 而在html文件中使用 /static/ 时,路径是相对于网站根目录的,浏览器会向服务器请求 http://127.0.0.1:8080/static/xxx
      • Tera模版转义提取后内容的问题
        • 使用下面的safe来防止转义
        • {{ content | safe }}
    • CSS基础

      • 选择器
        • 元素选择器
          • <p>
        • 类选择器/常用
          • .class
        • ID选择器/具有唯一性
          • #id
      • 盒子
        • margin: 遵循上右下左
        • border
        • padding
      • 布局
        • block:块级,独立一块
        • inline: 内联元素
        • inline-block:内联块,可以设置宽高
        • none:不可见
      • 弹性布局flex
        • 需要父容器
        • item:flex:占位比例
        • gap:间隔
        • justify-content:主轴对齐
          • flex-direction:改变主轴
        • align-items:交叉轴
      • 网格布局grid
        • fr可用空间的分数,fraction of the available space
      • 定位position
        • static:默认
        • relative:微调
        • absolute:相对于最近的已定位的父级元素
        • fixed 固定,常用导航器
      • 文本在html中默认是16px
      • Emmet快速输入,lorem提供随机文字
          (li>article>(h3>lorem2)(p>lorem)+svg+a+img[src="https://picsum.photos/720/720?random=$"])*5
        

Powered by Rust Actix-Web