浏览代码

优化工作路径拼接方法

lifei6671 7 年之前
父节点
当前提交
894382dfe0
共有 5 个文件被更改,包括 38 次插入15 次删除
  1. 11 12
      commands/command.go
  2. 7 0
      conf/enumerate.go
  3. 4 1
      controllers/DocumentController.go
  4. 7 0
      converter/converter.go
  5. 9 2
      models/BookResult.go

+ 11 - 12
commands/command.go

@@ -194,32 +194,31 @@ func ResolveCommand(args []string) {
 		}
 	}
 	if conf.LogFile == "" {
-		conf.LogFile = filepath.Join(conf.WorkingDirectory, "logs")
+		conf.LogFile = conf.WorkingDir("runtime","logs")
 	}
 	if conf.ConfigurationFile == "" {
-		conf.ConfigurationFile = filepath.Join(conf.WorkingDirectory, "conf", "app.conf")
-		config := filepath.Join(conf.WorkingDirectory, "conf", "app.conf.example")
+		conf.ConfigurationFile = conf.WorkingDir( "conf", "app.conf")
+		config := conf.WorkingDir("conf", "app.conf.example")
 		if !filetil.FileExists(conf.ConfigurationFile) && filetil.FileExists(config) {
 			filetil.CopyFile(conf.ConfigurationFile, config)
 		}
 	}
-	gocaptcha.ReadFonts(filepath.Join(conf.WorkingDirectory, "static", "fonts"), ".ttf")
-
-	err := beego.LoadAppConfig("ini", conf.ConfigurationFile)
+	if err := gocaptcha.ReadFonts(conf.WorkingDir( "static", "fonts"), ".ttf");err != nil {
+		log.Fatal("读取字体文件时出错 -> ",err)
+	}
 
-	if err != nil {
-		log.Println("An error occurred:", err)
-		os.Exit(1)
+	if err := beego.LoadAppConfig("ini", conf.ConfigurationFile);err != nil {
+		log.Fatal("An error occurred:", err)
 	}
-	uploads := filepath.Join(conf.WorkingDirectory, "uploads")
+	uploads := conf.WorkingDir("uploads")
 
 	os.MkdirAll(uploads, 0666)
 
 	beego.BConfig.WebConfig.StaticDir["/static"] = filepath.Join(conf.WorkingDirectory, "static")
 	beego.BConfig.WebConfig.StaticDir["/uploads"] = uploads
-	beego.BConfig.WebConfig.ViewsPath = filepath.Join(conf.WorkingDirectory, "views")
+	beego.BConfig.WebConfig.ViewsPath = conf.WorkingDir("views")
 
-	fonts := filepath.Join(conf.WorkingDirectory, "static", "fonts")
+	fonts := conf.WorkingDir("static", "fonts")
 
 	if !filetil.FileExists(fonts) {
 		log.Fatal("Font path not exist.")

+ 7 - 0
conf/enumerate.go

@@ -289,4 +289,11 @@ func URLForWithCdnJs(p string) string {
 		return cdn + "/" + p
 	}
 	return cdn + p
+}
+
+func WorkingDir(elem ...string) string {
+
+	elems := append([]string{ WorkingDirectory },elem...)
+
+	return filepath.Join(elems...)
 }

+ 4 - 1
controllers/DocumentController.go

@@ -882,7 +882,10 @@ func (c *DocumentController) Export() {
 		c.Abort("200")
 
 	}else if output == "pdf" || output == "epub" || output == "docx" || output == "mobi"{
-		models.BackgroupConvert(c.CruSession.SessionID(),bookResult)
+		if err := models.BackgroupConvert(c.CruSession.SessionID(),bookResult);err != nil {
+			c.ShowErrorPage(500,"导出失败,请查看系统日志")
+		}
+
 		c.ShowErrorPage(200,"文档正在后台转换,请稍后再下载")
 	}else{
 		c.ShowErrorPage(200,"不支持的文件格式")

+ 7 - 0
converter/converter.go

@@ -72,6 +72,13 @@ var (
 	ebookConvert = "ebook-convert"
 )
 
+func CheckConvertCommand() error {
+	args := []string{ "--version" }
+	cmd := exec.Command(ebookConvert, args...)
+
+	return cmd.Run()
+}
+
 // 接口文档 https://manual.calibre-ebook.com/generated/en/ebook-convert.html#table-of-contents
 //根据json配置文件,创建文档转化对象
 func NewConverter(configFile string, debug ...bool) (converter *Converter, err error) {

+ 9 - 2
models/BookResult.go

@@ -27,7 +27,7 @@ import (
 )
 
 var(
-	exportLimitWorkerChannel = gopool.NewChannelPool(conf.GetExportProcessNum(),conf.GetExportQueueLimitNum())
+	exportLimitWorkerChannel = gopool.NewChannelPool(conf.GetExportLimitNum(),conf.GetExportQueueLimitNum())
 )
 
 type BookResult struct {
@@ -215,14 +215,21 @@ func (m *BookResult) ToBookResult(book Book) *BookResult {
 }
 
 //后台转换
-func BackgroupConvert(sessionId string,bookResult *BookResult){
+func BackgroupConvert(sessionId string,bookResult *BookResult) error {
+
+	if err := converter.CheckConvertCommand(); err != nil {
+		beego.Error("检查转换程序失败 -> ",err)
+		return err
+	}
 	err := exportLimitWorkerChannel.LoadOrStore(bookResult.Identify, func() {
 		bookResult.Converter(sessionId)
 	})
 	if err != nil {
 		beego.Error("将导出任务加入任务队列失败 -> ",err)
+		return err
 	}
 	exportLimitWorkerChannel.Start()
+	return nil
 }
 
 //导出PDF、word等格式