fix: 解决网站 PHP 版本切换报错的问题 (#3228)

This commit is contained in:
zhengkunwang 2023-12-08 16:04:09 +08:00 committed by GitHub
parent fb709e7eaf
commit d4def44545
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 5 deletions

View File

@ -9,6 +9,7 @@ import (
"encoding/pem"
"errors"
"fmt"
"github.com/1Panel-dev/1Panel/backend/utils/common"
"os"
"path"
"reflect"
@ -1247,6 +1248,7 @@ func (w WebsiteService) ChangePHPVersion(req request.WebsitePHPVersionReq) error
phpDir = path.Join(constant.RuntimeDir, runtime.Type, runtime.Name, "php")
oldFmContent, _ = fileOp.GetContent(fpmConfDir)
newComposeByte []byte
supervisorDir = path.Join(appInstall.GetPath(), "supervisor")
)
envParams := make(map[string]string, len(envs))
handleMap(envs, envParams)
@ -1267,7 +1269,7 @@ func (w WebsiteService) ChangePHPVersion(req request.WebsitePHPVersionReq) error
return busErr
}
newComposeByte, busErr = changeServiceName(composePath, appInstall.ServiceName)
newComposeByte, busErr = changeServiceName(appDetail.DockerCompose, appInstall.ServiceName)
if busErr != nil {
return err
}
@ -1288,6 +1290,22 @@ func (w WebsiteService) ChangePHPVersion(req request.WebsitePHPVersionReq) error
return busErr
}
}
if common.CompareVersion(appDetail.Version, "7.0") && !fileOp.Stat(supervisorDir) {
if appDetail.Update {
app, err := appRepo.GetFirst(commonRepo.WithByID(appDetail.AppId))
if err != nil {
busErr = err
return busErr
}
if busErr = downloadApp(app, appDetail, nil); err != nil {
return busErr
}
}
if busErr = fileOp.CopyDir(path.Join(phpDir, "supervisor"), appInstall.GetPath()); err != nil {
return busErr
}
}
if out, err := compose.Up(appInstall.GetComposePath()); err != nil {
if out != "" {
busErr = errors.New(out)

View File

@ -651,11 +651,9 @@ func chownRootDir(path string) error {
return nil
}
func changeServiceName(composePath, newServiceName string) (composeByte []byte, err error) {
func changeServiceName(newComposeContent, newServiceName string) (composeByte []byte, err error) {
composeMap := make(map[string]interface{})
fileOp := files.NewFileOp()
composeContent, _ := fileOp.GetContent(composePath)
if err = yaml.Unmarshal(composeContent, &composeMap); err != nil {
if err = yaml.Unmarshal([]byte(newComposeContent), &composeMap); err != nil {
return
}
value, ok := composeMap["services"]