【Ubuntu】Ubuntu arm64 部署 Blazor Server 应用

部署步骤

  1. 发布
  2. 安装运行环境:dotnet-sdk(必装)、aspnetcore-runtimedotnet-runtime
  3. 安装证书
  4. 设置环境变量:临时变量当前用户永久变量所有用户的永久变量
  5. 运行:终端运行后台运行
    在这里插入图片描述

基本情况

开发系统环境

  • 系统:Windows 10 专业版 22H2 19045.3693
  • 开发软件IDE:Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.6.5
  • 项目框架:Blazor Server 应用
  • 目标框架:.NET 6.0
  • 系统架构:x64
    在这里插入图片描述

发布系统环境

  • 系统:Ubuntu 20.04.6 LTS focal
  • 架构:arm64

系统信息

lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

查看架构

sudo dpkg  --print-architecture

arm64

二、部署

2.1 准备部署文件

2.1.1 发布

  • 配置: Release
  • 目标框架(F): net6.0
  • 部署模式(M): 框架依赖
  • 目标运行时(U): 可移植
    在这里插入图片描述

2.1.2 打包文件 - 压缩zip

如:RSS_NCD_MINI_BlazorServer.zip

2.1.3 将打包文件从Windows拷贝到Ubuntu系统

推荐将文件放在/home/<用户>/<新建公司名/产品名>/<项目名>目录下
如:/home/signway/rsszy/webapp3/

2.1.4 释放文件 - 解压zip

  1. 打开Ubuntu终端
  2. 跳转到RSS_NCD_MINI_BlazorServer.zip所在目录
cd /home/signway/rsszy/webapp3/
  1. 使用unzip指令解压RSS_NCD_MINI_BlazorServer.zip文件
unzip RSS_NCD_MINI_BlazorServer.zip

Archive:  RSS_NCD_MINI_BlazorServer.zip
  inflating: Microsoft.IdentityModel.Protocols.OpenIdConnect.dll  
  inflating: Microsoft.IdentityModel.Tokens.dll  
  inflating: RSS_NCD(MINI)_BlazorServer.deps.json  
  inflating: RSS_NCD(MINI)_BlazorServer.dll  
  inflating: RSS_NCD(MINI)_BlazorServer.exe  
  inflating: RSS_NCD(MINI)_BlazorServer.pdb  
  inflating: RSS_NCD(MINI)_BlazorServer.runtimeconfig.json  
  inflating: System.IdentityModel.Tokens.Jwt.dll  
  inflating: web.config              
   creating: wwwroot/
   creating: wwwroot/css/
   creating: wwwroot/css/bootstrap/
  inflating: wwwroot/css/bootstrap/bootstrap.min.css  
  inflating: wwwroot/css/bootstrap/bootstrap.min.css.map  
   creating: wwwroot/css/open-iconic/
   creating: wwwroot/css/open-iconic/font/
   creating: wwwroot/css/open-iconic/font/css/
  inflating: wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css  
   creating: wwwroot/css/open-iconic/font/fonts/
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.eot  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.otf  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.svg  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.ttf  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.woff  
  inflating: wwwroot/css/open-iconic/FONT-LICENSE  
  inflating: wwwroot/css/open-iconic/ICON-LICENSE  
  inflating: wwwroot/css/open-iconic/README.md  
  inflating: wwwroot/css/site.css    
  inflating: wwwroot/favicon.ico     
  inflating: wwwroot/RSS_NCD(MINI)_BlazorServer.styles.css  
  inflating: appsettings.Development.json  
  inflating: appsettings.json        
  inflating: Microsoft.AspNetCore.Authentication.JwtBearer.dll  
  inflating: Microsoft.IdentityModel.JsonWebTokens.dll  
  inflating: Microsoft.IdentityModel.Logging.dll  
  inflating: Microsoft.IdentityModel.Protocols.dll 

2.2 安装框架

2.2.1 下载框架

.NET 6.0下载地址

  • dotnet-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

  • dotnet-sdk-6.0.417-linux-arm64.tar.gz

在这里插入图片描述

  • aspnetcore-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

注意: 必须安装SDK,才能使用dotnet指令运行程序。

2.2.2 安装dotnet-sdk

  1. 将下载的文件拷贝到Ubuntu系统目录
    推荐将文件放在/home/<用户>/<功能>/<框架名>目录下
    如:/home/signway/install/dotnet/
  2. 打开终端跳转到文件目录
cd /home/signway/install/dotnet/
  1. 安装dotnet-sdkdotnet-runtimeaspnetcore-runtime
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.417-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf dotnet-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf aspnetcore-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

上述指令只会在运行它的终端生效。
你可以编辑shell配置文件以永久添加命令。Linux有几个不同的shell,每个shell都有不同的配置文件。例如:

  • Bash Shell: ~/.bash_profile~/.bashrc
  • Korn Shell: ~/.kshrc.profile
  • Z Shell: ~/.zshrc.zprofile

编辑shell的相应源文件,并在现有PATH语句的末尾添加:$HOME/dotnet。如果没有包含PATH语句,则添加一个新行,export DOTNET_ROOT=$HOME/dotnet。同时将export PATH=$PATH:$HOME/dotnet添加到文件末尾。

# ...
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.3 安装证书

2.3.1 安装证书

dotnet dev-certs https --trust
dotnet dev-certs https -t

signway@RK3588:~/rsszy/webapp2$ dotnet dev-certs https --trust


 
 
Trusting the HTTPS development certificate was requested. Trusting the certificate
on Linux distributions automatically is not supported. For instructions on how to
manually trust the certificate on your Linux distribution, go to
https://aka.ms/dev-certs-trust
A valid HTTPS certificate is already present.

2.3.2 未安装会出现什么情况?

The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application 'dev-certs' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet-download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found
Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.

Unhandled exception. System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
   at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Reload()
   at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load()
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at Microsoft.AspNetCore.Builder.WebApplication.Run(String url)
   at Program.<Main>$(String[] args) in E:\SVN\RCSoft1\RSS_NCD(MINI)\RSS_NCD(MINI)_BlazorServer\RSS_NCD(MINI)_BlazorServerAPI\Program.cs:line 85
已放弃 (核心已转储)

2.4 添加环境变量

2.4.1 临时运行

每次打开终端运行以下命令来设置临时变量

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.4.2 永久添加 - 当前登录用户

1. 打开 ~/.bashrc文件
vi  ~/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;

esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi


export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet

2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!

2.4.3 永久添加 - 所有用户

1. 打开 /etc/profile文件
sudo vim /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!
4. 重新加载

执行以下指令生效

source /etc/profile

2.4.4 查看设置的环境变量

1 只看PATH变量
echo $PATH

/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet

2 查看所有环境变量
env

SHELL=/bin/bash
SESSION_MANAGER=local/RK3588:@/tmp/.ICE-unix/20779,unix/RK3588:/tmp/.ICE-unix/20779
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_CONTROL=/home/signway/.cache/keyring-ZRVEE2
DOTNET_ROOT=/home/signway/dotnet
SSH_AUTH_SOCK=/home/signway/.cache/keyring-ZRVEE2/ssh
XMODIFIERS=@im=ibus
SSH_AGENT_PID=20915
GTK_MODULES=gail:atk-bridge
PWD=/home/signway
LOGNAME=signway
XDG_SESSION_TYPE=x11
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
HOME=/home/signway
LANG=zh_CN.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=GNOME
VTE_VERSION=6003
XRDP_SOCKET_PATH=/run/xrdp/sockdir
XRDP_PULSE_SOURCE_SOCKET=xrdp_chansrv_audio_in_socket_10
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/af8cf72d_9406_4502_87df_7737e813f8a2
LESSCLOSE=/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /bin/lesspipe %s
USER=signway
GNOME_TERMINAL_SERVICE=:1.393
XRDP_SESSION=1
DISPLAY=:10.0
XRDP_PULSE_SINK_SOCKET=xrdp_chansrv_audio_out_socket_10
SHLVL=1
QT_IM_MODULE=ibus
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-LY2CUzKESO,guid=88d0510cbc94cdf2015ed92765542918
UID=1000
_=/bin/env


2.5 运行

**注意:一定要到根目录下运行,不要使用全路径,不然一些资源加载不了导致页面显示不正常**

2.5.1 临时变量运行程序

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

2.5.2 永久变量运行程序

cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

signway@RK3588:~$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ dotnet 'RSS_NCD(MINI)_BlazorServer.dll'
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:9002
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://[::]:9003
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/signway/rsszy/webapp2/

2.5.3 永久变量静默运行(后台运行)

cd /home/signway/rsszy/webapp2/
nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &

signway@RK3588:~/rsszy/webapp2$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &
[1] 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.4 查看后台运行

ps aux | grep <运行程序名称>

ps aux | grep BlazorServer

signway@RK3588:~/rsszy/webapp2$ ps aux | grep BlazorServer
signway    70286  0.6  2.2 24527624 90396 pts/2  Sl   17:59   0:01 dotnet RSS_NCD(MINI)_BlazorServer.dll
signway    70327  0.0  0.0  11664   664 pts/2    S+   18:03   0:00 grep --color=auto BlazorServer

2.5.5 终止运行程序

kill <PID>

kill 70286

signway@RK3588:~/rsszy/webapp2$ kill 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.6 强制终止运行程序

kill -9 <PID>

kill -9 70286

signway@RK3588:~/rsszy/webapp2$ kill -9 70336
signway@RK3588:~/rsszy/webapp2$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/173572.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ消息队列快速入门

RabbitMQ消息队列快速入门 初始MQ MQ全称为Message Queue&#xff0c;即消息队列&#xff0c;是在消息的传输过程中保存消息的容器。它是典型的生产者-消费者模型。 生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。消息的生产和消费都是异步的&am…

SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句的使用

SQL DELETE 语句 SQL DELETE 语句用于删除表中的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件;注意&#xff1a;在删除表中的记录时要小心&#xff01;请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句&#xff0c;将会删除表中的所…

战备器材管理系统-部队物资仓库管理系统

一、项目背景 传统的战备物资管理&#xff0c;一般依赖于一个非自动化的、以纸张文件为基础的系统来记录、追踪进出的货物&#xff0c;完全由人工实施仓库内部的管理&#xff0c;因此仓库管理的效率极其低下。对此&#xff0c;我们运用无线射频技术(RFID)的仓库智能管理系统&am…

Fiddler抓包看这篇就够了:fiddler设置弱网测试

弱网测试 概念&#xff1a;弱网看字面意思就是网络比较弱&#xff0c;我们通称为信号差&#xff0c;网速慢。 意义&#xff1a;模拟在地铁、隧道、电梯和车库等场景下使用APP &#xff0c;网络会出现延时、中断和超时等情况。 自动化测试相关教程推荐&#xff1a; 2023最新自…

基于单片机加热炉多参数检测和PID炉温系统

**单片机设计介绍&#xff0c; 基于单片机加热炉多参数检测和PID炉温系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的公交安全预警系统可以被设计成能够实时监测公交车辆的行驶状态&#xff0c;并在发生异常情况…

金蝶云星空套打设计

文章目录 金蝶云星空套打设计下载登录打开需要创建套打的单据新建套打模板数据中心-发货通知单-设置预览 金蝶云星空套打设计 下载 登录 打开需要创建套打的单据 KD开头&#xff0c;是标准产品预设。 新建套打模板 默认A4纸 默认插入三行三列。 拖入文本&#xff0c;填写内容…

计算机基础知识54

ORM的介绍 # ORM是什么&#xff1f; 我们在使用Django框架开发web应用的过程中&#xff0c;不可避免地会涉及到数据的管理操作&#xff08;增、删、改、查&#xff09;&#xff0c;而一旦谈到数据的管理操作&#xff0c;就需要用到数据库管理软件&#xff0c;例如mysql、oracle…

map的基础定义及运用

Map 1 使用 1 声明 /*声明map*/map<int, string> myMap {{1, "Apple"}, {2, "Banana"}, {3, "Orange"}};2 插入元素 myMap.insert(make_pair(4, "Graphes"));3 通过访问键查找和访问元素 cout << myMap[2] <<…

Ubuntu Server download

前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来&#xff0c;Ubuntu 一直在获得市场份额&#xff0c;截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…

小白也能看懂的国内外 AI 芯片概述

随着越来越多的企业将人工智能应用于其产品&#xff0c;AI芯片需求快速增长&#xff0c;市场规模增长显著。因此&#xff0c;本文主要针对目前市场上的AI芯片厂商及其产品进行简要概述。 简介 AI芯片也被称为AI加速器或计算卡&#xff0c;从广义上讲只要能够运行人工智能算法…

本机idea连接虚拟机中的Hbase

相关环境&#xff1a; 虚拟机&#xff1a;Centos7 hadoop版本:3.1.3 hbase版本:2.4.11 zookeeper版本:3.5.7 Java IDE:IDEA JDK&#xff1a;8 步骤 步骤一&#xff1a;在idea创建一个maven项目 步骤二&#xff1a;在虚拟机里找到core-site.x…

【C++】map multimap

文章目录 1.map介绍2.map的使用3.multimap介绍4.multimap的使用 1.map介绍 map的文档 翻译&#xff1a; map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 在map中&#xff0c;键值key通常用于排序和惟一地标识元素&#x…

四川芸鹰蓬飞:抖店运营的时候注意什么?

抖店作为一个短视频平台&#xff0c;吸引了越来越多的商家加入。在抖店上进行有效的运营是提高销量和曝光度的关键。那么&#xff0c;抖店怎么设置运营呢&#xff1f;有哪些方法可以帮助商家在这个竞争激烈的平台上脱颖而出呢&#xff1f; 一、抖店怎么设置运营&#xff1f; 首…

VC++添加包含目录

安装了QT;它带有很多例子; 新建一个工程,添加一个C++源文件,随便拷个例子的源码过来; 然后VS会提示头2个include语句出错; 因为找不到这两个头文件;这需要添加包含目录; 进入项目属性页;VC++目录 - 包含目录,它之前有2个系统的值;点击右侧的下拉箭头按钮,点…

天空分割技术解决方案

图像处理技术已经成为企业提升用户体验、优化产品和服务的重要工具。美摄科技&#xff0c;作为全球领先的AI图像处理技术提供商&#xff0c;一直致力于研发和应用最先进的技术&#xff0c;以满足企业的各种需求。今天&#xff0c;我们很高兴地向大家介绍我们的新一代产品——美…

【PTA题目】L1-4 稳赢 分数 15

L1-4 稳赢 分数 15 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但…

AR远程辅助技术应用到气象部门有何好处?

随着科技的不断发展&#xff0c;人类对于自然环境的理解和掌控能力也在不断提升。其中&#xff0c;AR(增强现实)技术的应用&#xff0c;为气象监控带来了革命性的变化。AR气象远程监控&#xff0c;就是将AR技术与气象监控相结合&#xff0c;通过虚拟与现实的融合&#xff0c;实…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大痛点分析

数字化时代银行网点厅堂营销存在以下5大痛点&#xff1a; 1、业务办理时间较长。目前很多银行业务办理时间仍然较长&#xff0c;可能的原因包括银行业务办理流程比较复杂、柜员操作技能不够熟练、银行系统的稳定性欠佳、网点某段时间客户比较多等。 2、现场提交材料太多。银行…

事件溯源(Event Sourcing)和命令查询责任分离(CQRS)经验

这篇文章是实现一个基于 CQRS 和事件溯源原则的应用程序&#xff0c;描述这个过程的方式&#xff0c;我相信分享我面临的挑战和问题可能对一些人有用。特别是如果你正在开始自己的旅程。 业务背景 项目的背景与空中交通管理&#xff08;ATM&#xff09;领域相关。我们为一个 …

Spring框架学习 -- 核心思想

目录 (1) Spring是什么? (2) 什么是IOC容器? (3) 从传统开发认识spring (4) 这种传统开发的缺陷 (5)解决传统开发中的缺陷 (6) 对比总结规律 (7) 理解IOC 创作不易多多支持 (1) Spring是什么? 我们常说的Spring的全称是: Spring Framework(Spring框架), 它是一个开源…