solo 从 2.2.0 升级到最新 (2.9.2)

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

本人很懒,所以一直没有升级,近来发现 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 然后拷贝表结构到生产环境吧。

推荐标签 标签

  • 旅游

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

    96 引用 • 901 回帖 • 1 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 28 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 222 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    54 引用 • 44 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 344 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    181 引用 • 408 回帖 • 484 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 241 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 489 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 666 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 5 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • danl
    164 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 576 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖 • 6 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 2 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 22 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 2 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 451 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注