swoft使用問題
報(bào)錯(cuò)信息:
Swoft\Annotation\Exception\AnnotationException(code:0) Property or method(App\Helper\bsp\ResourceBsp) with `@xxx` must be define class annotation
解決方法:
//問題通常是由于注解部分的類沒有引用導(dǎo)致的条舔,解決方法是檢查下面幾個(gè)類在對(duì)應(yīng)情況下是否有引用//bean工廠useSwoft\Bean\Annotation\Mapping\Bean;
//參數(shù)注入
useSwoft\Bean\Annotation\Mapping\Inject;
//請(qǐng)求參數(shù)
useSwoft\Http\Server\Annotation\Mapping\RequestMapping;
//請(qǐng)求方法
useSwoft\Http\Server\Annotation\Mapping\RequestMethod;
//引用
useSwoft\Rpc\Client\Annotation\Mapping\Reference;
//如果是RPC client的控制類晤愧,需要引入@Controller注解類政恍,或者引入@Bean注解類
2.打印日記的工具函數(shù)無(wú)法打印對(duì)象
問題詳情:
調(diào)用導(dǎo)出phf等函數(shù)补疑,返回的是一個(gè)對(duì)象张吉,打印日記函數(shù)只能打印數(shù)組民假,沒有針對(duì)對(duì)象進(jìn)行處理
報(bào)錯(cuò)信息:
解決方法:
判斷不是數(shù)組時(shí)莺治,直接返回結(jié)果,不做處理
3.swoft_start.sh 命令執(zhí)行報(bào)語(yǔ)法錯(cuò)誤口四,語(yǔ)法并沒有錯(cuò)誤
Syntax error: end of file unexpected (expecting “then”)
錯(cuò)誤原因
在win下重新編輯了文件,換行是\r \n 者蠕,在linux中換行只有\(zhòng)n窃祝,所以出現(xiàn)語(yǔ)法問題
解決方法(以下都行)
使用linux命令行編輯swoft_start.sh文件:Vim 打開文件掐松,命令模式(冒號(hào)模式:)輸入 :set fileformat=unix踱侣,然后:wq 保存
或者使用 win編輯器(比如vs)修改該文檔結(jié)束符(LF)
4.rpc 連接錯(cuò)誤,提示創(chuàng)建連接失敗
報(bào)錯(cuò)信息
(Swoft\\Connection\\Pool\\Exception\\ConnectionPoolException) Create connection error(Connect failed host=susan-aio-resource port=8099) file(/var/www/swoft/vendor/swoft/rpc-client/src/Connection.php) line (82)
錯(cuò)誤原因1:
容器的網(wǎng)絡(luò)問題大磺,跟rpc服務(wù)端不在同一個(gè)網(wǎng)絡(luò)
先在容器內(nèi) ping
解決方法
服務(wù)訪問進(jìn)入容器管理界面抡句,添加網(wǎng)絡(luò) 如as_default(具體看自己的網(wǎng)絡(luò)名)
拉到最底部,加入網(wǎng)絡(luò)里面選 as_default
mysql 容器杠愧,設(shè)置了mysql默認(rèn)數(shù)據(jù)庫(kù)字符集待榔、表字符集、字段字符集都為utf8mb4流济,但插入中文數(shù)據(jù)锐锣,再取出來(lái)會(huì)顯示為?绳瘟?雕憔,只有在Navicat 中顯示為中文;接口訪問和終端工具使用select語(yǔ)句查出來(lái)都是亂碼糖声。終端工具直接會(huì)插入不了中文
一.查看mysql官方鏡像啟動(dòng)的容器中字符集狀態(tài)
首先進(jìn)入容器內(nèi)部
docker exec -it mysql /bin/bash
查看字符集狀態(tài)
locale
可以看到斤彼,默認(rèn)的是POSIX字符集,這個(gè)傳統(tǒng)的字符集是不支持中文的蘸泻,所以我們的核心操作就是要更改字符集為支持中文的字符集琉苇。
查看容器承載系統(tǒng)支持的所有字符集
locale -a
root@mysql:/# locale -a
C
C.UTF-8
POSIX
C.UTF-8這個(gè)字符集,是可以支持中文的悦施,把承載系統(tǒng)的默認(rèn)字符集修改為C.UTF-8
4.修改profile文件并扇,并重新加載環(huán)境變量
echo "export LANG=C.UTF-8" >>/etc/profile && source /etc/profile
報(bào)錯(cuò)信息:
Warning from https://mirrors.aliyun.com/composer: You are using an outdated version of Composer. Composer 2.0 is now available and you should upgrade. See https://getcomposer.org/2
報(bào)錯(cuò)原因:
公司用的swoft鏡像里面composer的版本是1.9抡诞,目前composer新版為2.*,需要升級(jí)才能安裝依賴
使用命令 composer self-update 升級(jí)composer
在swoft_start.sh腳本文件中加入該命令即可
#!/bin/sh
check_install() {
? ? if? [ ! -e $1 ]; then
? ? composer -v && composer self-update && composer install && touch $1
? ? fi
? ? return $?
}
check_install "install.lock"
if? [ $? -eq 0 ]; then
? ? swoftcli run
else
? ? echo $?
fi
7.Rpc連接報(bào)錯(cuò), 修改命名空間后提示路由找不到穷蛹,
報(bào)錯(cuò)信息
(Swoft\\Rpc\\Client\\Exception\\RpcResponseException)? Route(1.0-App\\Rpc\\Lib\\BspSms\\SmsInterface) is not founded!At /var/www/swoft/vendor/swoft/rpc-server/src/Middleware/DefaultMiddleware.php line 57",
報(bào)錯(cuò)原因:
Rpc客戶端的接口類命名空間跟服務(wù)端的不一致
現(xiàn)在服務(wù)端的接口命名空間全都在App/Rpc/Lib級(jí),調(diào)用服務(wù)時(shí)沐绒,客戶端接口也只能在App/Rpc/Lib級(jí)俩莽,否則就會(huì)報(bào)找不到路由。
8.Rpc連接報(bào)錯(cuò)乔遮,json數(shù)據(jù)格式錯(cuò)誤
報(bào)錯(cuò)信息
pc客戶端請(qǐng)求的數(shù)據(jù)包格式不對(duì)扮超,服務(wù)端無(wú)法解析,頻繁請(qǐng)求報(bào)如下錯(cuò)誤:
json_decode error: Syntax error
報(bào)錯(cuò)原因,
bean.php加了/r/n注釋代碼出刷,swoft1不能注釋掉這行,請(qǐng)確認(rèn)服務(wù)端版本是swoft1還是swoft2
9. Rpc報(bào)錯(cuò)璧疗,redis方法錯(cuò)誤
提示redis某個(gè)方法不能用
報(bào)錯(cuò)原因
swoft官方更新的高版本與其依賴的redis庫(kù)不兼容,官方目前已經(jīng)修復(fù)馁龟,但我們自己使用的直接固定版本就行崩侠,目前固定版本為 swoft2.0.10
報(bào)錯(cuò)信息
bytes exhausted (tried to allocate 262144 bytes) in /var/www/swoft/vendor/
報(bào)錯(cuò)原因:
bean文件
- 報(bào)錯(cuò)原因:
一般是bean文件來(lái)回注入