"Solo 是一款一个命令就能搭建好的 Java 开源博客系统,如果你想开个独立博客,请一定不要错过! [图片] 2.9.4 版本加入了一款新皮肤 nijigen,二次元萌娘控们值得一试。另外,这个版本我们做了一次数据库重构,从 2.9.3 升级前务必备份数据库后再升级! 案例 D 的个人博客 Jiahao.Zhang’ .."

Java 开源博客 Solo 2.9.4 发布,新皮肤加数据库重构

本贴最后更新于 218 天前,其中的信息可能已经水流花落

Solo 是一款一个命令就能搭建好的 Java 开源博客系统,如果你想开个独立博客,请一定不要错过!

imagepng

2.9.4 版本加入了一款新皮肤 nijigen,二次元萌娘控们值得一试。另外,这个版本我们做了一次数据库重构,从 2.9.3 升级前务必备份数据库后再升级!

案例

功能

安装

从 2.9.3 升级只需将已有的配置拷贝覆盖即可,启动后会自动升级。升级前请备份数据库,以免出现意外!

文档

项目

2.9.4 变更记录

历史版本变更请浏览这里

  • Solo

    Solo 是一款小而美的博客系统,专为程序员设计。

    575 引用 • 4521 回帖 • 724 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2171 引用 • 7368 回帖 • 1039 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    218 引用 • 2356 回帖 • 1037 关注
  • 博客

    记录并分享人生的经历。

    161 引用 • 1857 回帖
感谢    关注    收藏    赞同    反对    举报    分享
52 回帖    
请输入回帖内容...
  • linker      

    升级失败了。 [INFO]-[2018-09-16 15:36:21]-[org.b3log.solo.service.UpgradeService:191]: Upgrading from version [2.9.3] to version [2.9.4]… [ERROR]-[2018-09-16 15:36:21]-[org.b3log.solo.service.UpgradeService:210]: Upgrade failed! org.h2.jdbc.JdbcSQLException: Duplicate column name “ARTICLEAUTHORID”; SQL statement: ALTER TABLE b3_solo_article ADD articleAuthorId VARCHAR(19) DEFAULT ‘’ NOT NULL [42121-190] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) at org.h2.message.DbException.get(DbException.java:179) at org.h2.message.DbException.get(DbException.java:155) at org.h2.table.Table.setColumns(Table.java:409)

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    H2 数据库

    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    看来只能自己手动处理了,DDL 操作没有回滚。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    H2 数据库咋整呢?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    用 H2 自带的那个 web 管理工具,看下表结构。

    1. article 表里面删了三列 articleCreateDatearticleUpdateDatearticleAuthorEmail,多加了三列 articleCreatedarticleUpdatedarticleAuthorId
    2. comment 表里面删了一列 commentDate,多加了一列 commentCreated
    3. 确认下以上多加的列是否有值

    如果以上 3 步确认没问题,然后看下 option 表的 version 行,值如果是 2.9.3 的话,手动更新成 2.9.4 然后重启。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    手动升级了数据库, 确认字段该有的都有, 不该有的都没有. 但是还是遇到了一个问题, 似乎是 FreeMarker 报告的: [ERROR]-[2018-09-16 17:09:01]-[org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer:138]: FreeMarker renders error FreeMarker template error: An error has occurred when reading existing sub-variable “articleUpdateDate”; see cause exception! The type of the containing value was: extended_hash+string (org.json.JSONObject wrapped into f.e.b.StringModel)


    FTL stack trace ("~" means nesting-related): - Failed at: ${article.articleUpdateDate?string("y… [in template “article-list.ftl” at line 27, column 21] - Reached through: #include “article-list.ftl” [in template “index.ftl” at line 63, column 21]

    Java stack trace (for programmers):

    freemarker.core._TemplateModelException: [… Exception message was already printed; see it above …] at freemarker.ext.beans.BeanModel.get(BeanModel.java:183) at freemarker.core.Dot._eval(Dot.java:43) at freemarker.core.Expression.eval(Expression.java:83) at freemarker.core.BuiltInsForMultipleTypes$stringBI._eval(BuiltInsForMultipleTypes.java:692) at freemarker.core.Expression.eval(Expression.java:83)

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    我是直接从 github 拉去的最新的源码到一个新目录中. 只修改了 latke 的配置文件中关于域名的部分. 然后, mvn jetty:run 运行的.

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    补充错误信息:

        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
        at java.base/java.lang.Thread.run(Thread.java:844)
    

    Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1505) at freemarker.ext.beans.BeanModel.invokeGenericGet(BeanModel.java:272) at freemarker.ext.beans.BeanModel.get(BeanModel.java:152) … 57 more Caused by: org.json.JSONException: JSONObject[“articleUpdateDate”] not found. at org.json.JSONObject.get(JSONObject.java:540) … 64 more

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    我 grep 了一下
    articleUpdateDate 似乎还有不少 ftl 模版在用这个. p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #f3f3bd; background-color: #2a2a2a; background-color: rgba(42, 42, 42, 0.96)} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #f3f3bd; background-color: #2a2a2a; background-color: rgba(42, 42, 42, 0.96); min-height: 16.0px} span.s1 {font-variant-ligatures: no-common-ligatures} span.Apple-tab-span {white-space:pre}

    grep -ir articleUpdateDate .

    Binary file ./.git/index matches

    ./.idea/dataSources/e220bb86-34ca-4298-ab6f-714ddc29d30c.xml:

    ./src/test/resources/skins/mobile/article.ftl: ${article.articleUpdateDate?string(“yyyy-MM-dd HH🇲🇲ss”)}

    ./src/test/resources/skins/mobile/article-list.ftl: <div class=“cal-month month-${article.articleUpdateDate?string(“MM”)}”>${article.articleUpdateDate?string(“MM”)}

    ./src/test/resources/skins/mobile/article-list.ftl:

    ${article.articleUpdateDate?string(“dd”)}

    ./src/main/webapp/skins/ease/article.ftl: ${article.articleUpdateDate?string(“yy-MM-dd HH:mm”)}

    ./src/main/webapp/skins/ease/article-list.ftl: ${article.articleUpdateDate?string(“yy-MM-dd HH:mm”)}

    ./src/main/webapp/skins/owmx-3.0/article.ftl: ${updateDateLabel}:${article.articleUpdateDate?string(“yyyy-MM-dd HH🇲🇲ss”)}

    ./src/main/webapp/skins/owmx-3.0/article-list.ftl: ${article.articleUpdateDate?string(“yyyy-MM-dd HH:mm”)}

    ./src/main/webapp/skins/NeoEase/article.ftl: ${article.articleUpdateDate?string(“yyyy-MM-dd HH🇲🇲ss”)}

    ./src/main/webapp/skins/NeoEase/article-list.ftl: ${article.articleUpdateDate?string(“yyyy-MM-dd HH🇲🇲ss”)}

    ./src/main/webapp/skins/tree-house/article.ftl: ${article.articleUpdateDate?string(“yyyy-MM-dd HH🇲🇲ss”)}

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    似乎是由于 skin 都没有升级导致的啊 ~~~

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    问题已经定位, 就是由于部分皮肤没有升级兼容新版本的 solo 导致的. 改用 Medium 皮肤后问题解决.

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    仍然有少量报错: [ERROR]-[2018-09-16 17:42:19]-[org.b3log.solo.service.ArticleQueryService:862]: Gets relevant articles failed java.lang.IllegalStateException: java.lang.ClassCastException: java.base/java.lang.Long cannot be cast to java.base/java.util.Date at org.b3log.solo.util.comparator.ArticleUpdateDateComparator.compare(ArticleUpdateDateComparator.java:48) at org.b3log.solo.util.comparator.ArticleUpdateDateComparator.compare(ArticleUpdateDateComparator.java:32) at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) at java.base/java.util.TimSort.sort(TimSort.java:220)

    感谢    赞同    反对    举报    分享       评论    回复
  • 88250      

    @linker 以上升级问题均已修复,非常感谢帮忙 ❤️️

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken      

    备份以前的数据,然后不升级,直接用新版本,再还原数据,是不是有些数据还原不了?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    “还原”是什么操作?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken            

    额,不好意思,搞错了

    感谢    赞同    反对    举报    分享       评论    回复
  • oagnahz      

    升级成功报个到。

    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    非常快的响应速度啊,赞~

    感谢    赞同    反对    举报    分享       评论    回复
  • oagnahz      

    点击 ‘动态‘ ,500

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    哪个皮肤?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • oagnahz   1 感谢            

    就是导航上面的动态 https://88250.b3log.org/dynamic.html

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • PeterChu   1 感谢      

    QQ20180917150521png hahahahahahahhahahahahah,好萌啊😂

    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    已经修复 😅

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • oagnahz            

    ok,幸苦 d 大

    感谢    赞同    反对    举报    分享       评论    回复
  • wangzp          

    该内容仅作者和楼主可见。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    F12 看下请求

    2 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    20180917192313png

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    主要是为了让用户可以“无缝”登录。

    感谢    赞同    反对    举报    分享       评论    回复
  • vinasis      

    支持👍

    感谢    赞同    反对    举报    分享       评论    回复
  • wangzp            

    Snipaste_20180918_095139png emmm

    Snipaste_20180918_095302png

    感谢    赞同    反对    举报    分享       评论    回复
  • wangzp            

    为嘛 jquery.min.js 文件的内容变成了和 index 一样的内容? imagepng 直接 cat 服务器上的 jquery.min.js 文件内容和控制台看见不一样啊。 是我的配置有问题吗?

    感谢    赞同    反对    举报    分享       评论    回复
  • linker      

    发现对 option 的 SQL 读特别频繁,是不是考虑缓存下?

    [INFO]-[2018-09-19 02:00:31]-[org.b3log.latke.repository.jdbc.util.JdbcUtil:150]: Executing SQL [select * from b3_solo_option whereoptionCategory=? limit 0,2147483647]

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    请关注这个 issue

    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken      

    Sym: imagepng Solo: imagepng

    从 Solo 同步过来的文章,在社区匿名评论,同步到 Solo 的评论还是实名的…

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    Solo 那边没有匿名机制嘛。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken   1 感谢            

    哦哦 😂 。

    imagepng 另外发现一个皮肤问题,侧边栏目录出现滚动条时,底部统计数据会随滚动条滚动

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            
    感谢    赞同    反对    举报    分享       评论    回复
  • laker            

    相同的错误,请问怎么解决的?

    2 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    是最新代码么?哪个皮肤?

    感谢    赞同    反对    举报    分享       评论    回复
  • linker            

    skins 仓库里面的部分皮肤,仍然在模版里用了些老的字段。

    感谢    赞同    反对    举报    分享       评论    回复
  • washmore      

    D 大太给面子了呀…我这就去升级 2.9.4 咩哈哈哈哈 , 另外发现最近的文章无法同步到社区来了, 这个我也去看一下咩原因

    感谢    赞同    反对    举报    分享       评论    回复
  • pencilso      

    emmmm… 新皮肤我很喜欢 ~~~~

    感谢    赞同    反对    举报    分享       评论    回复
  • pencilso      

    另外 感谢 D 大把我的博客放到 solo 介绍里。。。。 增加了浏览量 = =

    感谢    赞同    反对    举报    分享       评论    回复
  • zjhch123      

    我也想把我做的那个皮肤加入进来呀,应该如何操作呢…

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • Vanessa            
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken   1 感谢      

    又发现一个 Feed 的问题,内容包含 Emoji 表情时,访问 /tag-articles-feed.do?oId=****** 报错:

    [Fatal Error] :2:9: 字符引用 "&#
    [ERROR]-[2018-09-28 14:12:58]-[org.b3log.latke.util.XMLs:66]: format pretty XML failed
    org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 9; 瀛楃寮曠敤 "&#
            at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
            at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
            at org.b3log.latke.util.XMLs.format(XMLs.java:56)
            at org.b3log.solo.model.feed.atom.Feed.toString(Feed.java:330)
            at org.b3log.solo.processor.FeedProcessor.tagArticlesAtom(FeedProcessor.java:293)
            at org.b3log.solo.processor.FeedProcessor_$$_jvst305_31._d9tagArticlesAtom(FeedProcessor_$$_jvst305_31.java)
    

    imagepng

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    你压缩下原文 txt zip 一个给我,我这里用原始 emoji 字符没重现。

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken            

    imagepng

    imagepng

    如果订阅输出模式是摘要的话,需要在文章管理的摘要里填入 Emoji 才有效果

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • 88250            

    我这里好像没啥问题,你有空的话拉个 master 的代码试试?

    1 回复 
    感谢    赞同    反对    举报    分享       评论    回复
  • iTanken            

    😮 哦哦,好

    感谢    赞同    反对    举报    分享       评论    回复
请输入回帖内容...