GithubHelp home page GithubHelp logo

michaelliao / itranswarp Goto Github PK

View Code? Open in Web Editor NEW
772.0 37.0 349.0 60.1 MB

Full-featured CMS including blog, wiki, discussion, etc. Cloud native application that powered by SpringBoot.

Home Page: https://www.liaoxuefeng.com

License: GNU General Public License v3.0

Java 48.26% CSS 24.98% JavaScript 4.51% HTML 21.87% Shell 0.12% Dockerfile 0.01% Lua 0.24%
blog wiki discussion cms java springboot3

itranswarp's Introduction

iTranswarp

Full-featured CMS including blog, wiki, discussion, etc. Cloud native application that powered by SpringBoot.

Github Workflow

Docker Pulls

  • Based on SpringBoot 3.x
  • Search support
  • OAuth2 integration (Weibo, QQ, Facebook, etc.)
  • SEO support
  • REST API
  • Customized CSS with UIkit2

Environment

  • JDK 17
  • MySQL 5.7
  • Redis 5/6 with RediSearch 2

Quick Start

Please check Quick Start Guide.

Run with Docker

Run MySQL, RediSearch in background:

cd dev
docker-compose up -d

Run iTranswarp application:

docker run -d -p 2019:2019 --rm \
  --env-file /path/to/env-file \
  -v /var/log/itranswarp:/var/log/itranswarp \
  --name itranswarp michaelliao/itranswarp:1.4

Build

$ mvn -DskipTests=true clean package

Or check build.sh.

Initialize database

DDL and test data are generated by SchemaBuilder.java.

Create schema:

$ mysql -u root -p < dev/sql/ddl.sql

NOTE: re-run this SQL file will remove all existing data.

Import test data:

$ mysql -u root -p it < dev/sql/init.sql

Run

java -jar itranswarp.jar

Visit http://localhost:2019 for demo.

Search

Search is auto-enabled if RediSearch 2.x is detected. How to install RediSearch in Redis.

Configuration

All configurations are passed by environments:

$ PROFILES=production TIME_ZONE=Asia/Shanghai DOMAIN=www.example.com \
  DB_HOST=localhost DB_PASSWORD=changeit \
  REDIS_HOST=localhost \
  java -jar itranswarp.jar

Please check application.yml for environment variables.

Deploy

iTranswarp is deployed by Docker. Images can be pulled from DockerHub.

                        ┌─────────────────────────────────────────┐
                        │                   VPC                   │
                        │         ┌───────────┐                   │
                        │         │  Docker   │     ┌────────────┐│
        https        ┌──┴──┐      │┌─────────┐│     │  AWS:RDS   ││
◀───────────────────▶│     │ http ││ AWS:ECS ││◀───▶│   MySQL    ││
 https ┌─────┐ https │ ELB │◀────▶│└─────────┘│     └────────────┘│
◀─────▶│ CDN │◀─────▶│     │      │┌─────────┐│     ┌────────────┐│
       └─────┘       └──┬──┘      ││ AWS:ECS ││◀───▶│ElasticCache││
                        │         │└─────────┘│     │   Redis    ││
                        │         └───────────┘     └────────────┘│
                        └─────────────────────────────────────────┘

itranswarp's People

Contributors

deppwang avatar michaelliao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

itranswarp's Issues

建议:改进网页的正文视觉效果

   随便打开一个网页(如:https://www.liaoxuefeng.com/wiki/1016959663602400)。当电脑端的浏览器窗口宽度变窄后左侧的目录一栏会缩回左侧(隐藏状态),但是右侧(正文)部分的内容无法随浏览器的窗口换行。希望您能够改进一下!谢谢!

dao层支持like功能吗?

1.warpdb.jar支持like功能吗?代码里没看到例子,like功能应该怎么写?

2.下面的写法会报错
代码
where("tags like '%?%'", tag)

异常
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

IdUtil.java

为什么服务只能小于8台?

                if (n >= 0 && n < 8) {
                    logger.info("detect server id from host name {}: {}.", hostname, n);
                    return n;
                }

您好,关于您分布式进程的代码有错误

https://www.liaoxuefeng.com/wiki/1016959663602400/1017631559645600

# task_worker.py

import time, sys, queue
from multiprocessing.managers import BaseManager

# 创建类似的QueueManager:
class QueueManager(BaseManager):
    pass

# 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字:
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')

# 连接到服务器,也就是运行task_master.py的机器:
server_addr = '127.0.0.1'
print('Connect to server %s...' % server_addr)
# 端口和验证码注意保持与task_master.py设置的完全一致:
m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
# 从网络连接:
m.connect()
# 获取Queue的对象:
task = m.get_task_queue()
result = m.get_result_queue()
# 从task队列取任务,并把结果写入result队列:
for i in range(10):
    try:
        n = task.get(timeout=1)
        print('run task %d * %d...' % (n, n))
        r = '%d * %d = %d' % (n, n, n*n)
        time.sleep(1)
        result.put(r)
    except Queue.Empty:
        print('task queue is empty.')
# 处理结束:
print('worker exit.')

异常处理部分
Queue.Empty
Queue未定义

1.9版本的若干问题

部署了1.9版本,发现几个问题
1、admin登录后,进入管理页面,发现头条没有新增的按钮
2、没有新增人员的入口,无法注册新人的话,是不是讨论区就没啥用了?
3、后台无法修改密码,包括admin,本想通过登录页的忘记口令来处理,无奈这个页面似乎不存在

一个建议:wiki里左半边的markdown编辑器似乎不支持表格语法,如果支持表格,就完美了。

标签功能

文章有标签,但是好像不能点击标签链接查看所有文章。

目前支持点击标签链接查看所有文章吗?

关于nginx配置问题,只想要用http不想用https

我目前只想用ip来打开界面。
不知道是不是我配置不对还是什么的 。每次刷新页面静态文件老是指向https,如下图
image

我的nginx配置,如下
upstream itw_upstream {
server 127.0.0.1:2019 fail_timeout=3s;
}

http

server {

listen 80;

server_name localhost;

#rewrite ^(.*)$ http://127.0.0.1:2019 permanent;

root   /usr/share/nginx/html;

access_log /var/log/nginx/host.access.log;
error_log  /var/log/nginx/host.error.log;

client_max_body_size 2m;

gzip            on;
gzip_min_length 1k;
gzip_buffers    4 8k;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types      text/css application/x-javascript application/json;

sendfile on;

location = /favicocan.ico {
    expires 10d;
}

location = /robots.txt {
    expires 10d;
}

location ~ /static/ {
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}

    if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  "http://127.0.0.1:2019";
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
        expires 300d;
        return 200;
    }

    proxy_pass         http://127.0.0.1:2019;
    proxy_read_timeout 3s;
}
location ~ /files/ {
    if ($request_method ~* "(GET|POST)") {
        add_header "Access-Control-Allow-Origin"  *;
    }

    if ($request_method = OPTIONS ) {
        add_header "Access-Control-Allow-Origin"  "http://118.25.135.7:2019";
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
        add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
        expires 300d;
        return 200;
    }

    proxy_pass         http://127.0.0.1:2019;
    proxy_read_timeout 3s;
}

location / {
    if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
        return 503;
    }
    proxy_pass       http://itw_upstream;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

About Quick Start Guide, Visit it doesn't work after Step 3

I follow the Guide

Installed Docker, Downloaded Configuration Files and Ran Docker Compose under fresh Ubuntu 22.04 GCP instance, but it doesn't work
ERR_CONNECTION_REFUSED

And I saw container are running

~$ sudo docker ps
CONTAINER ID   IMAGE                         COMMAND                  CREATED         STATUS                   PORTS                                   NAMES
8ce2c72216fd   michaelliao/itranswarp:1.12   "java -jar /app/itra…"   8 minutes ago   Up 7 minutes             0.0.0.0:80->2019/tcp, :::80->2019/tcp   itranswarp
9a0d87365580   redislabs/redisearch:2.4.8    "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes             6379/tcp                                redis
943de1c39acb   mysql:5.7.38                  "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes (healthy)   3306/tcp, 33060/tcp                     mysql
sudo docker attach 8ce2c72216fd


^C2022-12-23 17:38:40.907  INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariCP - Shutdown initiated...
2022-12-23 17:38:40.917  INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariCP - Shutdown completed.

The instance firewall was open, tried both http:// and https://
Firewalls
HTTP traffic
On
HTTPS traffic
On

My complete installation dump
https://gist.github.com/ckc/0c26a02c6b011e0be53540b2ae3aaf43

May I have any further more guide to make it work please?

Thanks!

docker部署失败

java.io.FileNotFoundException: /app/src/main/resources/static/css/main.css (Permission denied)
这个错误

ubuntu18.04LTS+宝塔面板,怎么部署 itranswarp

机器是:ubuntu18.04LTS,安装了宝塔面板对网站统一管理。
环境:通过宝塔面板配置的php7.3+mysql5.7+ngix1.6+Redis5+memcached1.5.7+nodejs8.10+openjdk11等。

/www/wwwroot/itranswarp/存放代码的位置。

通过命令
$ mysql -u root -p < release/ddl.sql
$ mysql -u root -p it < release/init.sql
成功创建数据库,并导入测试数据。

编译的时候碰到问题了:
1、存放代码的地方,所有者需要是www
-rwxr-xr-x 1 www www 322 Nov 1 14:31 build.sh*
-rw-r--r-- 1 www www 6610 Nov 1 14:31 checkstyle.xml
-rw-r--r-- 1 www www 11357 Nov 1 14:31 LICENSE
但是编译的时候,又是用ubuntu的默认账号编译的。
两个所有者不一样,可能无法执行文件和编译。
我不知道应该怎么去编译。
2、看配置run的时候,是需要执行以下命令:
java -jar itranswarp.jar
我不知道应该怎么去运行。
3、部署
$ ansible/deploy.py --profile
这个会自动部署一些软件,但是我现在的都已经通过宝塔面板部署完成了。
在宝塔的环境里面,配置其他的网站,我只需要吧php或者其他配置上传到/www/wwwroot/webname/ 到这个文件夹,然后就可以打开网页并使用了。
但是在 itranswarp我不知道应该怎么去使用他。
4、在ubuntu服务器,需要通过宝塔面板去管理里面的一些环境软件,还有几个web网站,所以我需要使用这样的环境。

内容出现叠字

python教程->函数->定义函数->#返回多值,此小节部分:

原文:“比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:”

叠字:“新的新的”

登录页面的style

内容是不是可以撑开一点,把页脚挤到下面去,第一次访问您的网站,点开登录,发现页脚好奇怪。

IDE练习插件链接失效

Java教程使用IDE练习插件一节中提供的插件链接已失效,添加插件时提示:An error occurred while collecting items to be installed

session context was:(profile=epp.package.java, phase=org.eclipse.equinox.internal.p2.engine.phases.Collect, operand=, action=).

Artifact not found: https://liaoxuefeng.gitee.io/learn-java-update-site/plugins/com.itranswarp.learnjava.practice.plugin_1.0.1.jar.

https://liaoxuefeng.gitee.io/learn-java-update-site/plugins/com.itranswarp.learnjava.practice.plugin_1.0.1.jar

Artifact not found: https://liaoxuefeng.gitee.io/learn-java-update-site/features/java.practice.feature_1.0.1.jar.

https://liaoxuefeng.gitee.io/learn-java-update-site/features/java.practice.feature_1.0.1.jar

Python教程页面粘贴代码 格式不正确

首先非常感谢廖老师提供这样一个教程网站,本人一个小菜鸟在回复区域时使用遇到一个问题,觉得有必要改善,十分影响体验
个人问题为:
1 粘贴代码格式不正确
2 回复无法删除

以下为详细描述:
我之前用过 Chrome 和Firefox,在粘贴Python代码时,编辑时看着代码都是正确的,但是发布后看着如图所示,我也选择了 是Python代码,但是如图,也不能删除
https://www.liaoxuefeng.com/discuss/969955749132672/1289937167056930

图片

代码输入框有bug

在代码输入框中,按一下tab键,就会自动跳转出输入框。另外,代码输入框,输入代码后,如果代码是一个死循环语句,那么网页就会崩溃。

切换语言时报错

复现步骤

  1. 点击“简体中文”

image

错误信息如下:

2022-05-14 17:39:41.676 ERROR 57179 --- [nio-2019-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy] with root cause

java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy
	at org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver.setLocale(AcceptHeaderLocaleResolver.java:142)
	at com.itranswarp.web.controller.MvcController.locale(MvcController.java:108)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at com.itranswarp.web.filter.GlobalFilterRegistrationBean$GlobalFilter.doFilter(GlobalFilterRegistrationBean.java:149)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:833)


截图如下:

image

您好,关于您进程间通信的代码有错误

https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064

from multiprocessing import Process, Queue
import os, time, random

# 写数据进程执行的代码:
def write(q):
    print('Process to write: %s' % os.getpid())
    for value in ['A', 'B', 'C']:
        print('Put %s to queue...' % value)
        q.put(value)
        time.sleep(random.random())

# 读数据进程执行的代码:
def read(q):
    print('Process to read: %s' % os.getpid())
    while True:
        value = q.get(True)
        print('Get %s from queue.' % value)

if __name__=='__main__':
    # 父进程创建Queue,并传给各个子进程:
    q = Queue()
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))
    # 启动子进程pw,写入:
    pw.start()
    # 启动子进程pr,读取:
    pr.start()
    # 等待pw结束:
    pw.join()
    # pr进程里是死循环,无法等待其结束,只能强行终止:
    pr.terminate()

这里pw.join() 等待生产者结束后,下一句pr.terminate()就直接把消费者给关闭了。如果这个时候消费者还没处理完呢?
这里在消费者代码中加个sleep

from multiprocessing import Process, Queue
import os, time, random

# 写数据进程执行的代码:
def write(q):
    print('Process to write: %s' % os.getpid())
    for value in ['A', 'B', 'C']:
        print('Put %s to queue...' % value)
        q.put(value)
        time.sleep(random.random())

# 读数据进程执行的代码:
def read(q):
    print('Process to read: %s' % os.getpid())
    while True:
        value = q.get(True)
        time.sleep(3)
        print('Get %s from queue.' % value)

if __name__=='__main__':
    # 父进程创建Queue,并传给各个子进程:
    q = Queue()
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))
    # 启动子进程pw,写入:
    pw.start()
    # 启动子进程pr,读取:
    pr.start()
    # 等待pw结束:
    pw.join()
    # pr进程里是死循环,无法等待其结束,只能强行终止:
    pr.terminate()

结果输出,消费者只是启动了进程还没开始处理就结束了

~/temp/python-test py xxx.py
Process to write: 18591
Put A to queue...
Process to read: 18592
Put B to queue...
Put C to queue...

在生产者队列里加个标志,然后join消费者即可

from multiprocessing import Process, Queue
import os, time, random

_end = "secret"
# 写数据进程执行的代码:
def write(q):
    print('Process to write: %s' % os.getpid())
    for value in ['A', 'B', 'C']:
        print('Put %s to queue...' % value)
        q.put(value)
        time.sleep(random.random())
    q.put(_end)

# 读数据进程执行的代码:
def read(q):
    print('Process to read: %s' % os.getpid())
    while True:
        value = q.get(True)
        if value == _end:
            q.put(_end)
            print("end")
            break
        time.sleep(3)
        print('Get %s from queue.' % value)

if __name__=='__main__':
    # 父进程创建Queue,并传给各个子进程:
    q = Queue()
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))
    # 启动子进程pw,写入:
    pw.start()
    # 启动子进程pr,读取:
    pr.start()
    # 等待pw结束:
    # pr进程里是死循环,无法等待其结束,只能强行终止:
    pr.join()

IdUtil生成的只有偶数

private static long generateId(long epochSecond, long next, long shardId) {
	return ((epochSecond - OFFSET) << 21) | (next << 5) | shardId;
}

这里异或计算出来末尾就没有1

RediSearch中文搜索不到结果,但是英文可以

1.在网站的搜索框里搜索
1)中文,搜索不到结果
image

这个是请求头:
http://xxx/search?q=%E6%9C%8D%E5%8A%A1

2)英文,能搜索到结果

2.在redis-cli里搜索
中文和英文,都能搜索到结果
image


请问一下,这个可能是什么原因导致的呢?

微博扫码登陆故障返回403

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Jul 25 16:20:56 CST 2019
There was an unexpected error (type=Forbidden, status=403).
User is locked.

bundle.js太大,耗时30s

源码里的bundle.js,差不多3M,耗时30s。你官网的bundle.js,只有几百kb,耗时只有几十ms。

怎么压缩的?是用webpack吗?😄

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.