【技術派部署篇】云服務器部署技術派

1 環境搭建

1.1 JDK安裝

# ubuntu
sudo apt update # 更新apt
apt install openjdk-8-jdk # 安裝JDK

安裝完畢之后,執行 java -version 命令進行驗證:

1.2 Maven安裝

cd ~
mkdir soft
cd soft
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -zxvf apache-maven-3.8.8-bin.tar.gzvim ~/.bashrc# 在最后添加環境變量
export M2_HOME=/root/soft/apache-maven-3.8.8
PATH=$M2_HOME/bin:$PATH# 配置生效
source ~/.bashrc

下載了半天,發現是下載源有問題,換成國內的源下載應該會變快。

wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar -xzf apache-maven-3.3.9-bin.tar.gz

配置完成之后執行命令 mvn -version進行驗證

國內添加阿里的鏡像源,加快下載速度

vim ~/soft/apache-maven-3.8.8/conf/settings.xml# 在<mirros>標簽中,添加下面的鏡像源<mirror><id>alimaven</id><name>aliyun-maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror># 騰訊云的鏡像騰訊云服務器會快一點。<mirror><id>nexus-tencentyun</id><mirrorOf>*</mirrorOf><name>Nexus tencentyun</name><url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror> 

1.3 redis安裝與配置

1.3.1 安裝redis

安裝 Redis

# 安裝redis
sudo apt install redis-server

啟動 Redis 服務

# 啟動 Redis 服務: 安裝完成后,啟動 Redis 服務并設置為開機自啟。 
sudo systemctl start redis-server
sudo systemctl enable redis-server

驗證 Redis 是否安裝成功

# 使用以下命令檢查 Redis 服務的運行狀態,如果顯示為 active (running),則表示 Redis 已成功啟動。
sudo systemctl status redis-server

還可以使用redis-cli命令連接到 Redis 服務器進行簡單的測試:

redis-cli ping

如果返回 PONG,則說明 Redis 服務器正常工作。

1.3.2 配置redis

找到配置文件位置

# 找到redis安裝目錄,查看配置文件
whereis redis
ls

修改配置文件

vim /etc/redis/redis.conf

更推薦的方式是拷貝一份配置出來進行修改,如在用戶目錄下新增:

cd ~
mkdir soft
cd soft
mkdir redis
cd redis
cp /etc/redis/redis.conf ./

主要修改一下配置:

# 根據實際情況判斷是否需要注釋掉ip限定
bind 127.0.0.1# 開啟后臺任務
damenoize yes
# 配置 Redis 是否被監控管理。supervised 設置為 no,表示 Redis 不會受到外部進程管理的干擾。
supervised no# 設置訪問密碼
requirepass 你的密碼# 端口號,建議需改默認的6379,避免被攻擊
port 6388# 幾個文件的路徑調整一下
pidfile /root(這個是用戶名)/soft/redis/redis.pid
logfile /root/redis/redis.log
dir /root/soft/redis/

寫一個啟動關閉腳本 :vim start.sh

#!/bin/bash# 檢查 pid.log 文件是否存在
if [ -f pid.log ]; then# 讀取 pid.log 中的每個 PID,檢查是否存在該進程cat pid.log | while read pid; doif ps -p $pid > /dev/null; thenecho "Killing existing Redis process with PID $pid"kill $pidelseecho "Process $pid not found, skipping."fidone
fi# 啟動 Redis 并記錄新的 PID
redis-server ./redis.conf# 獲取 Redis 的新 PID 并保存到 pid.log
new_pid=$(ps aux | grep '[r]edis' | awk '{print $2}')
echo $new_pid > pid.log# 檢查 Redis 是否啟動成功
if ps -p $new_pid > /dev/null; thenecho "Redis started successfully with PID $new_pid"
elseecho "Failed to start Redis"
fi

保存配置,添加執行權限

chmod +x start.sh

啟動redis服務

./start.sh

ss -lntp | grep 6379 確認是否啟動:

1.4 MySQL安裝

安裝MySQL

sudo apt-get install mysql-server

設置開機啟動:

sudo systemctl start mysql
sudo systemctl enable mysql

查詢登陸密碼:

grep "temporary password" /var/log/mysqld.log## 輸出如下
# A temporary password is generated for root@localhost: xxxx

修改密碼:

mysql> use mysql;mysql> alter user 'root'@'localhost' identified by '密碼';mysql> flush privileges;

啟動MySQL命令

# 啟動
sudo service mysql start
# 或 sudo service mysqld start# 關閉
sudo service mysql stop# 重啟
sudo service mysql restart

連接MySQL:

1.5 nginx配置

安裝nginx:

sudo apt install nginx

驗證安裝:

sudo systemctl status nginx

如果 Nginx 已經成功安裝并啟動,你會看到類似以下的輸出:

查看配置文件路徑:

nginx -t

重新加載nginx配置:

nginx -s reload

配置訪問域名:

cd /etc/nginx/vim nginx.conf# 添加子域名解析,每個域名一個獨立的配置文件
# 在http的一級標簽中,添加如下一行配置,表示在conf.d文件下的所有conf結尾的文件,都屬于我們需要使用的nginx配置信息
include /etc/nginx/conf.d/*.conf;

添加論壇的域名解析規則

vim conf.d/forum.conf# 內容如下
upstream  forum_host {server 127.0.0.1:8080;
}
server {#  server_name forum.hhui.top;gzip on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_min_length 100;gzip_types application/javascript text/css text/xml;gzip_disable "MSIE [1-6]\."; #配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持)gzip_vary on;location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {access_log   off;expires      1d;proxy_pass         http://forum_host;proxy_set_header   Host $host;proxy_set_header   X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location ~* ^.+\.(css|js|txt|xml|swf|wav|pptx)$ {access_log   off;expires      10m;proxy_pass         http://forum_host;proxy_set_header   Host $host;proxy_set_header   X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location / {proxy_set_header X-real-ip  $remote_addr;proxy_pass http://127.0.0.1:8080/;proxy_redirect default;}#   listen 443 ssl; # managed by Certbot#   ssl_certificate /usr/local/nginx/conf/conf.d/cert.pem;#   ssl_certificate_key /usr/local/nginx/conf/conf.d/key.pem;#   ssl_stapling on;#   ssl_stapling_verify on;#  resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;#   resolver_timeout 2s;
}server {
#    if ($host = forum.hhui.top) {
#        return 301 https://$host$request_uri;
#    } # managed by Certbotlisten 80;#   server_name forum.hhui.top;return 404; # managed by Certbot
}

證書使用let's encrypt生成

主要修改點如下:

  1. 移除 HTTPS 相關配置:刪除了 listen 443 ssl; 以及所有與 ssl_certificatessl_certificate_keyssl_stapling 等相關的配置行。
  2. 調整重定向邏輯:移除了 80 端口配置中重定向到 HTTPS 的部分,因為現在沒有 HTTPS 了。
  3. server_name配置server_name 可以根據你的需求選擇保留或移除。如果保留,可以指定特定的 IP 地址(如 server_name <你的 IP 地址>;),這樣 Nginx 只會對匹配該 IP 的請求進行響應;如果移除,Nginx 會響應所有未被其他 server 塊匹配的請求。

修改完配置文件后,使用 sudo nginx -t 檢查配置文件語法是否正確,然后通過 sudo nginx -s reload重新加載 Nginx 配置使更改生效。

2 源碼部署方式

源碼的部署方式表示直接使用源碼進行構建,下面直接以paicoding的github上main分支的源碼為例進行說明

2.1 下載源碼,并構建

下載

cd ~/
mkdir workspace
cd workspace
git clone git@github.com:itwanger/paicoding.git
或
git clone https://gitee.com/itwanger/paicoding.git

構建

cd paicoding
mvn clean install -DskipTests=ture -U

2.2 修改配置

在服務器上運行技術派時,原則上我們是希望以prod環境為主(表示這個是生產環境,如果是在測試機上進行部署,可以選擇test)

首先第一步就是修改對應環境的配置信息

數據庫配置:

vim paicoding-web/src/main/resources-env/prod/application-dal.yml# 修改數據庫和redis的連接密碼spring:datasource:url: jdbc:mysql://localhost:3306/${database.name}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: 真實的用戶名password: 真實的密碼redis:host: 真實的redis地址port: 真實的redis端口password: 真實的redis訪問密碼

oss配置:

生產環境上的圖片默認上傳到阿里云,因此也需要修改對應的配置

vim paicoding-web/src/main/resources-env/prod/application-image.ymlimage:# 服務器保存圖片的絕對地址abs-tmp-path: /home/admin/storage/# 圖片前綴web-img-path: forum/img/# 臨時存儲目錄tmp-upload-path: /tmp/forum/# 圖片訪問域名cdn-host: https://paicoding.com/oss:type: ali # 這個表示是使用阿里云的ossprefix: xxxendpoint: xxxak: xxxsk: xxxbucket: xxxhost: https://cdn.tobebetterjavaer.com/ # 訪問圖片的域名前綴

注意,當沒有oss時,希望直接將圖片保存到服務器上,可以如下設置(一般不建議這么干,一個是安全風險,一個是靜態圖片的存儲與網絡資源都將占用服務器,會導致服務器本身負載高)

log文件配置:

vim paicoding-web/src/main/resources-env/prod/application-web.ymllog:path: /home/admin/workspace/paicoding/logs # 請使用實際的地址進行替換
env:name: prod

2.3 登錄方式修改

技術派默認提供的是根據微信公眾號的驗證碼方式來實現登錄,因此如果希望在你自己的服務器上部署時,請完整的替換相應的微信公眾號二維碼、微信開放平臺對接的相關的配置參數,具體詳情可參考

下面列出基本的修改點:

1.配置文件 application-config.yml

  • view.site.contactMeWxQrCode: 公眾號二維碼
  • view.site.wxLoginUrl: 公眾號二維碼解碼后的文本

2.微信公眾號平臺

開啟開發者相關權限,設置回調url

登錄方式主要使用的是微信公眾平臺的回調機制,因此需要設置白名單,當前沒有使用直接調用微信公眾號接口獲取信息的功能,因此無需設置開發者id,密碼等信息

2.4 啟動

以上修改完畢之后,可以直接啟動服務(注意無需初始化數據庫表,默認的庫名 pai_coding,可以通過修改application.yml配置文件中的database.name來替換)

# 進入源碼根目錄
cd ~/workspace/paicoding
# 給啟動命令腳本添加執行權限
chmod +x launch.sh
# 啟動
./launch.sh start

啟動完畢之后,可以再當前目錄看到新增一個 logs 目錄,下面會有兩個日志文件

  • pai-prod.log:系統日志
  • req-prod.log:外部請求日志

當系統日志中輸出 啟動成功,點擊查看首頁 的字樣時,表示正常啟動了,此時可以進行訪問

說明:

重新部署命令: launch.sh start會重新打包,并將之前運行的.jar 重名為 .jar.bak 的本分文件

重啟命令:launch.sh restart單純的重啟,不會重新打包

若部署的不是prod環境,需要修改launch.sh腳本中的配置,將下面的 -Pprod 修改為 -P新環境

  • jvm參數,根據實際的機器情況進行需改調整

3 jar包部署方式

jar包部署的方式主要針對的是直接上傳一個fat-jar包到服務器上運行,編譯打包的過程可以是本機、也可以是jenkins,這里以簡單的本機為例進行說明

3.1 SSH配置

我們采用scp的方式上傳jar包,因此直接配置ssh訪問服務器會省事很多,避免每次都需要輸入密碼

  1. 本地生成密鑰對:一般可通過在本地終端輸入相關命令(如ssh-keygen)來生成密鑰對。
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"

  1. 服務器添加配置
    • 打開服務器上的~/.ssh/authorized_keys文件,命令為vim ~/.ssh/authorized_keys
    • 在文件中添加本機公鑰內容。 如示例中的公鑰內容:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVDpviHo9nRJ+i3S8KYZAi3Yp33J3whqdWb2W3hhjkiPZiih76Q/lvCinwVWi0NlvWZheBfENKiN0d4p3xaF6GC+DfrITwcIHm0/PbVOxWmuatfqD+C0CKYZxIshYsmRWFFXqRz83sCPHv4O66HEIfnlynKPdayygdG++K6wPTBNyKznk8C8Ghpd7q2UngMWjWv7s+jWp0tRQQmyRnJhcSogGzcs8W39l2U5Qy7IscWkB8OJ8ZfRynTVAFoVpMSJh6nrBbp9idREWT6zW9UdAvy9PG9IuWTX7oBQv+XYQBH1q5Y0ZqTJ2Ot35jUCLK35T+9uFkJcQH20VwW3VL6Epb your_email@example.com (實際操作中請替換為自己的本機公鑰) 。

配置完成后,就可以使用 scp 方式上傳 jar 包到服務器,無需每次都輸入密碼。

  1. 使用 scp 命令上傳 JAR 包:命令格式為scp -r 本地JAR包路徑 用戶名@服務器IP地址:服務器目標路徑
  • 如果是上傳單個 JAR 包,假設本地 JAR 包路徑為C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar,服務器用戶名為admin,服務器 IP 地址為192.168.1.100,希望將 JAR 包上傳到服務器的/home/admin/jar_files/目錄下,那么命令為:
scp -r C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar admin@192.168.1.100:/home/admin/jar_files/
  • 如果是上傳整個包含 JAR 包的目錄,例如C:\Users\user\Desktop\jar_packages目錄下有多個 JAR 包,要上傳到服務器的/home/admin/jar_files/目錄,命令為:
scp -r C:\Users\user\Desktop\jar_packages\* admin@192.168.1.100:/home/admin/jar_files/
  • 執行命令后,如果 SSH 密鑰對配置正確,就會開始上傳 JAR 包。如果提示輸入密碼,說明 SSH 密鑰對配置可能有問題,需要重新檢查配置。

在上傳過程中,會顯示上傳進度和相關信息。上傳完成后,就可以在服務器的指定目標路徑下找到上傳的 JAR 包。

3.2 項目配置

和源碼配置修改相同

  • prod:數據庫配置,oss配置,登錄配置

3.3 打包上傳

主要使用 deploy.sh 腳本實現本地編譯打包、上傳、運行等操作,注意上面幾個動作是一體的

  • 修改deploy.sh腳本中,需要上傳的jar包目錄、目標ip地址

chmod +x deploy.sh
# 打包jar,并上傳到服務器,關閉舊的應用,重新啟動新的應用
./deploy.sh prod

4 總結

本文以 Linux 系統為運行環境,介紹基礎環境搭建,含 JDK、Maven、Redis、MySQL、Nginx 的安裝與配置。提供源碼和 Jar 包兩種部署方式,前者需下載構建、修改配置再啟動;后者要配置 ssh、項目信息,用腳本打包上傳。歡迎實操反饋問題。

5 參考鏈接

  1. 技術派服務器部署指導手冊
  2. 項目倉庫(GitHub):https://github.com/itwanger/paicoding
  3. 項目倉庫(碼云):https://gitee.com/itwanger/paicoding
  4. 項目演示地址:https://paicoding.com

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76601.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux:35.其他IPC和IPC原理+信號量入門

通過命名管道隊共享內存的數據發送進行保護的bug&#xff1a; 命名管道掛掉后&#xff0c;進程也掛掉了。 6.systemV消息隊列 原理:進程間IPC:原理->看到同一份資源->維護成為一個隊列。 過程&#xff1a; 進程A,進程B進行通信。 讓操作系統提供一個隊列結構&#xff0c;…

【數據結構】紅黑樹超詳解 ---一篇通關紅黑樹原理(含源碼解析+動態構建紅黑樹)

一.什么是紅黑樹 紅黑樹是一種自平衡的二叉查找樹&#xff0c;是計算機科學中用到的一種數據結構。1972年出現&#xff0c;最初被稱為平衡二叉B樹。1978年更名為“紅黑樹”。是一種特殊的二叉查找樹&#xff0c;紅黑樹的每一個節點上都有存儲表示節點的顏色。每一個節點可以是…

2024年第十五屆藍橋杯CC++大學A組--成績統計

2024年第十五屆藍橋杯C&C大學A組--成績統計 題目&#xff1a; 動態規劃&#xff0c; 對于該題&#xff0c;考慮動態規劃解法&#xff0c;先取前k個人的成績計算其方差&#xff0c;并將成績記錄在數組中&#xff0c;記錄當前均值&#xff0c;設小藍已檢查前i-1個人的成績&…

vue2使用ezuikit-js播放螢石視頻

需求&#xff1a;需要在大屏上播放螢石視頻&#xff0c;用到官方的ezuikit-js插件實現&#xff0c;并實現視頻播放切換功能。有個問題至今沒有解決&#xff0c;就是螢石視頻的寬高是固定的&#xff0c;不會根據大屏縮放進行自適應。我這邊做了簡單的刷新自適應。 1.下載ezuikit…

愛普生TG-5510CA和TG-5510CB晶振成為服務器中的理想之選

在數字化時代&#xff0c;服務器作為數據存儲、處理與傳輸的核心樞紐&#xff0c;其性能的優劣直接影響著整個信息系統的運行效率與穩定性。從企業內部的數據中心到云計算服務提供商的大規模集群&#xff0c;服務器需要應對海量數據的高速處理與頻繁交互。而在服務器復雜精密的…

使用opentelemetry 可觀測監控springboot應用的指標、鏈路實踐,使用zipkin展示鏈路追蹤數據,使用grafana展示指標

1.安裝docker&#xff0c;docker-compose &#xff08;1&#xff09;安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm22.2、部署dockertar xvf docker-20.10.19.tgz cp docker/* /usr/bin/vim /usr/lib/systemd/system/docker.service[Unit] Descript…

5. 藍橋公園

題目描述 小明喜歡觀景&#xff0c;于是今天他來到了藍橋公園。 已知公園有 N 個景點&#xff0c;景點和景點之間一共有 M 條道路。小明有 Q 個觀景計劃&#xff0c;每個計劃包含一個起點 stst 和一個終點 eded&#xff0c;表示他想從 stst 去到 eded。但是小明的體力有限&am…

虛幻基礎:碰撞幀運算

能幫到你的話&#xff0c;就給個贊吧 &#x1f618; 文章目錄 碰撞碰撞盒線段檢測 幀運算&#xff1a;每個程序流就是一幀的計算結果速度過快時(10000)&#xff0c;導致每幀移動過大(83)&#xff0c;從而導致碰撞盒錯過而沒有碰撞速度快的碰撞要用線段檢測 碰撞 碰撞盒 線段檢…

Qt 入門 3 之對話框 QDialog

Qt 入門 3 之對話框 QDialog 本文從以下幾點分開講述&#xff1a; - 對話框的基本原理介紹 - 兩種不同類型的對話框 - 一個由多個窗口組成并且窗口間可以相互切換的程序 1.模態和非模態對話框 QDialog 類是所有對話框窗口類的基類。對話框窗口是一個經常用來完成短小任務或者…

數據結構——哈希技術及鏈地址法

目錄 一、哈希的定義 二、哈希沖突定義 三、構造哈希函數的方法 四、四種解決哈希沖突的方法 4.1 開放地址法 4.2 鏈地址法 4.3 再散列函數法 4.4 公共區溢出法 五、鏈地址法結構體設計 六、基本操作的實現 6.1 哈希函數 6.2 初始化 6.3 插入值 6.4 刪除值 6.5 查…

算法思想之前綴和(二)

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;算法思想之前綴和(二) 發布時間&#xff1a;2025.4.11 隸屬專欄&#xff1a;算法 目錄 滑動窗口算法介紹核心思想大致步驟 例題和為 K 的子數組題目鏈接題目描述算法思路代碼實現 和可被 K 整除的子數組題目鏈接題目…

開源的7B參數OCR視覺大模型:RolmOCR

1. 背景介紹 早些時候&#xff0c;Allen Institute for AI 發布了 olmOCR&#xff0c;這是一個基于 Qwen2-VL-7B 視覺語言模型&#xff08;VLM&#xff09;的開源工具&#xff0c;用于處理 PDF 和其他復雜文檔的 OCR&#xff08;光學字符識別&#xff09;。開發團隊對該工具的…

移動端六大語言速記:第14部分 - 數據庫操作

移動端六大語言速記:第14部分 - 數據庫操作 本文將對比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift這六種移動端開發語言在數據庫操作方面的特性,幫助開發者理解和掌握各語言的數據庫編程能力。 14. 數據庫操作 14.1 SQL查詢 各語言SQL查詢實現方式對比: 特性Ja…

有哪些反爬機制可能會影響Python爬取視頻?如何應對這些機制?

文章目錄 前言常見反爬機制及影響1. IP 封禁2. 驗證碼3. 請求頭驗證4. 動態加載5. 加密與混淆6. 行為分析 應對方法1. 應對 IP 封禁2. 應對驗證碼3. 應對請求頭驗證4. 應對動態加載5. 應對加密與混淆6. 應對行為分析 前言 在使用 Python 爬取視頻時&#xff0c;會遇到多種反爬…

ESP32開發入門:基于VSCode+PlatformIO環境搭建指南

前言 ESP32作為一款功能強大的物聯網開發芯片&#xff0c;結合PlatformIO這一現代化嵌入式開發平臺&#xff0c;可以大幅提升開發效率。本文將詳細介紹如何在VSCode中搭建ESP32開發環境&#xff0c;并分享實用開發技巧。 一、環境安裝&#xff08;Windows/macOS/Linux&#xf…

DeepSeek:穿透行業知識壁壘的搜索引擎攻防戰

DeepSeek&#xff1a;穿透行業知識壁壘的搜索引擎攻防戰 文 / 產業智能觀察組&#xff08;人機協同創作&#xff09; 一、搜索引擎的"認知折疊"危機 2024年Q1數據顯示&#xff0c;百度搜索結果前10頁中&#xff0c;61.7%的內容存在"偽專業化"現象——看似…

SQL 外鍵(Foreign Key)詳細講解

1. 什么是外鍵&#xff1f;?? ??定義??&#xff1a;外鍵是數據庫表中的一列&#xff08;或一組列&#xff09;&#xff0c;用于??建立兩個表之間的關聯關系??。外鍵的值必須匹配另一個表的主鍵&#xff08;Primary Key&#xff09;或唯一約束&#xff08;Unique Con…

5G中的DU和CU的作用

在5G網絡架構中&#xff0c;CU&#xff08;Centralized Unit&#xff0c;集中單元&#xff09; 和 DU&#xff08;Distributed Unit&#xff0c;分布單元&#xff09; 是無線接入網&#xff08;RAN&#xff09;的重要組成部分&#xff0c;它們的分工和作用如下&#xff1a; 1.…

深度解析 n8n:強大的開源工作流自動化平臺

在數字化時代&#xff0c;企業和個人面臨著日益復雜的工作流程和多樣化的應用工具&#xff0c;如何高效整合這些資源、實現工作流的自動化成為提升效率的關鍵。n8n 作為一款開源的工作流自動化平臺&#xff0c;憑借其強大的功能、廣泛的應用集成能力和靈活的部署方式&#xff0…

ruby超高級語法

以下是 Ruby 中一些 極度硬核 的語法和底層特性&#xff0c;涉及元編程的深淵、虛擬機原理、語法黑魔法等&#xff0c;適用于追求極限的 Ruby 開發者&#xff1a; 高級語法一 一、語法核彈級操作 1. 動態修改繼承鏈 class A; def foo; "A"; end end class B; def …