solo 从 2.2.0 升级到最新 (2.9.2)

本贴最后更新于 2051 天前,其中的信息可能已经沧海桑田

本人很懒,所以一直没有升级,近来发现 solo 已经升级到 2.9.2 了,然后看了下历史版本列表,都有 1 年多了。然后看了下每个版本 Features 和 Bugs,发现还是值得更新的,但是一路下来还是挺麻烦的。

刚开始直接从下载了 solo-2.9.2.war 进行升级,然后就很悲剧的报错。

[ERROR ]-[2018-08-17 03:00:28]-[org.b3log.solo.service.UpgradeService:154]: Attempt to skip more than one version to upgrade. Expected: 2.9.1; Actually: 1.7.0

日志提示错误,没办法只能去论坛搜索下解决方案了,结果表示比较麻烦。

我的运行模式放在 Tomcat 里面运行的,所以首先需要数据备份,主要是如下三个配置文件备份。

  • latke.properties
  • local.properties
  • solo.properties

其次备份当前项目,zip -r solo-2.2.0.zip solo,当升级失败的时候还能恢复。接下来就是开始升级之旅吧。

  1. 首先升级 2.3.0
  • 上传 war 至服务器
  • 停止 Tomcat
  • 解压 `jar -xvf
  • 复制配置文件
  • 启动 Tomcat
  1. 升级 2.4.0
    这一版本是大更新,主要涉及到数据库的更新,这里列举下 SQL,方便没有升级的人。
  • 停止 Tomcat

  • 上传并且解压 war 包

  • 复制配置文件

  • 通过 SQL 语句 desc b3_solo_page 检查是否在 pageIcon 字段

  • 如果没有则执行 SQL 语句 alter table b3_solo_page add pageIcon varchar(255) default ''

  • 通过 SQL 语句 select * from b3_solo_option where oId like 'stat%' 查询结果为空则执行如下 SQL 语句:

insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogArticleCount',statisticBlogArticleCount,'statistic' from b3_solo_statistic;
insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogCommentCount',statisticBlogCommentCount,'statistic' from b3_solo_statistic;
insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticBlogViewCount', statisticBlogViewCount,'statistic' from b3_solo_statistic;
insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticPublishedBlogArticleCount',statisticPublishedBlogArticleCount,'statistic' from b3_solo_statistic;
insert into b3_solo_option(oId,optionValue,optionCategory) select 'statisticPublishedBlogCommentCount',statisticPublishedBlogCommentCount,'statistic' from b3_solo_statistic;

```
  • 升级'version`,正好解决了文章开头的错误。通过如下 SQL 判断是否真的需要升级

    select * from b3_solo_option where oId='version';
    

如果需要升级则执行如下 SQL

 ```sql
update b3_solo_option set optionValue='2.4.0' where oId='version';
 ```
  • 确认以上步骤无误之后,删表跑路哈,其实是该表一废弃。delete from b3_solo_statistic
  • 启动 Tomcat
  1. 继续升级

亲测,必须要按照版本号一次次升级,不能直接升级到最新版本,不然不知道有多少坑等着你跳。


最后从坑里出不来了,现在出现了一个错误

[ERROR]-[2018-08-17 06:04:23]-[org.b3log.latke.repository.jdbc.JdbcRepository:776]: Count failed
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'solo.b3_solo_category' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
        at com.mysql.jdbc.Util.getInstance(Util.java:408)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)

@88250 能提供这个表的 SQL 以及相关的升级 SQL 语句么。

通过查看源码,已经找到了错误对应的 SQL。

CREATE TABLE b3_solo_category(
	`oId` varchar(19) NOT NULL,
	`categoryTitle` varchar(64) NOT NULL,
	`categoryURI` varchar(32) NOT NULL,
	`categoryDescription` text NOT NULL,
	`categoryOrder` int(11) NOT NULL,
	`categoryTagCnt` int(11) NOT NULL,
	PRIMARY KEY (`oId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `b3_solo_category_tag` (
	`oId` varchar(19) NOT NULL,
	`category_oId` varchar(19) NOT NULL,
	`tag_oId` varchar(19) NOT NULL,
	PRIMARY KEY (`oId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

https://gitee.com/dl88250/solo/blob/master/src/main/java/org/b3log/solo/service/UpgradeService.java

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250 1 赞同

    本地环境初始化一个最新版的 solo 然后拷贝表结构到生产环境吧。

推荐标签 标签

  • 旅游

    希望你我能在旅途中找到人生的下一站。

    83 引用 • 894 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 45 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 8 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    37 引用 • 24 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 428 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 223 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 3 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 1 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 210 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    534 引用 • 671 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 499 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    21 引用 • 22 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 31 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 596 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    60 引用 • 287 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 151 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    673 引用 • 535 回帖
  • 分享

    有什么新发现就分享给大家吧!

    240 引用 • 1729 回帖 • 1 关注
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 434 关注