xg309 这个问题参考 halo-dev/halo6672 , 目前已经修复等待 PR 合并后会发一个版本
PixEL 关键日志显示内存不足无法启动,你为 halo 分配了多少内存呢,如果没有手动设置过则默认是 256m,观察你的日志数据貌似也不多我的4k多条瞬间 80 篇文章以及一些其他数据都是使用的 256m 内存完全够用
2024-08-26T13:00:58.463+08:00 ERROR 7 --- [or-tcp-epoll-10] i.r.p.client.ReactorNettyClient : Connection Error reactor.netty.ReactorNetty$InternalNettyException: java.lang.OutOfMemoryError: Java heap space Caused by: java.lang.OutOfMemoryError: Java heap space at java.base/java.lang.J9VMInternals.primitiveClone(Native Method) ~[na:na]
建议给一个完整的日志下载链接,日志不全很难排查具体原因
- 已编辑
有使用过 Halo 提供的备份功能创建过备份吗,如果没有的话恐怕就没办法了,密码不要使用简单密码也不要将数据库端口暴露到公网
- 已编辑
点击下载 plugin-comment-widget 使用,支持匿名评论必须输入验证码了,详见: gh-133,发版本还得等等,安装后需要到插件设置开启匿名验证码
今天也有个小沙比刷我了 莫慌 我连夜写一个匿名评论需要图形验证码的功能
没有理解你说的”似乎是从官方代码库把相关的模型定义复制了过来“ 是什么,我看了你给出的文章导入导出插件仓库,并没有复制 Post 这些自定义模型,你可以参考 Extension Client 文档来与自定义模型交互,唯一复制的一个类是 AbstractContentService 因为文章的内容存储是增量的要获得真实的文章内容需要增量还原,目前还没有给插件一个公用的逻辑因此这里通过复制逻辑实现且这里的逻辑几乎不可能变因此没有危险
ipride https://www.halo.run/store/apps/app-dHakX 这不是有吗,提供了定时备份和同步
- 已编辑
sophic Controller 是因为限定了必须要注解
@ApiVersion
所以会自动添加前缀 /apis,Halo 文档中说明以 /api 或 /apis 开头的 API 需要认证或鉴权后才可访问,至于需要在 swagger 中看得到可以参考 spring-doc-openapi 的文档:
https://springdoc.org/#spring-webfluxwebmvc-fn-with-functional-endpoints
这是其中提供的示例:springdoc/springdoc-openapi-demosblob/2.x/demo-spring-boot-3-webflux-functional/src/main/java/org/springdoc/demo/app4/employee/EmployeeFunctionalConfig.java
或者参考 Halo 的示例:halo-dev/haloblob/6ea7abeff2f2a4aaa8d24d0385fc4618e7db7844/application/src/main/java/run/halo/app/core/extension/endpoint/PostEndpoint.java#L56-L66
区别在于原先通过RouterFunctions.route()
构建的 RouterFunction 是不带文档的在 swagger 上看不到,而通过SpringdocRouteBuilder.route()
构建的 RouterFunction 是需要多传一个参数来描述文档的可以在 swagger 看到public RouterFunction<ServerResponse> endpoint() { final var tag = "api.console.halo.run/v1alpha1/Post"; return SpringdocRouteBuilder.route() .GET("posts", this::listPost, builder -> { builder.operationId("ListPosts") .description("List posts.") .tag(tag) .response(responseBuilder() .implementation(ListResult.generateGenericClass(ListedPost.class)) ); QueryParamBuildUtil.buildParametersFromType(builder, PostQuery.class); } ) . build(); }
如果 Halo 文档有哪里写的不清楚的地方可以去文档项目提 issue
sophic 直接在浏览器访问 http://localhost:8090/hello-world 你写的 Functional Endpoint 方式是没有问题的可以得到 hello world 的文字,所以我不知道你说的没有效果是什么意思,如果 swagger 不行那就试试 postman 之类的
@Component @AllArgsConstructor public class TodoListRouterFactory { @Bean RouterFunction<ServerResponse> todoListRouter() { return route() .GET("/hello-world", accept(MediaType.TEXT_PLAIN), request -> ServerResponse.ok().bodyValue("Hello World")).build(); } }
- 已编辑
参考: https://github.com/halo-dev/halo/blob/main/application/src/main/java/run/halo/app/theme/router/ViewNameResolver.java 实现一个,在不考虑主题预览的情况下获取激活主题可以直接从查询 name 为 system 的ConfigMap 中获取不需要像 ThemeResolver 这样麻烦,其实就是得到激活主题的名字然后拼接模板路径检查文件是否存在,没有其他的办法。你可以提个 issue 让 Halo 直接提供类给插件使用来获取主题名称及判断模板是否存在,在 halo 没有提供之前先参照实现一个
LinuxSuRen 这个可能得看日志,API 返回的没有异常堆栈
LinuxSuRen 我们目前还没有接口自动化,精力有限,如果你感兴趣的话非常欢迎来尝试这一块
,但估计我们没有精力参与维护,所以可能会是一个坑