之前也做类似的,但是后来 API 经常变化,就没怎么维护了(
openssl s_client -showcerts -connect mirrors.tuna.tsinghua.edu.cn:443 -servername mirrors.tuna.tsinghua.edu.cn | grep "certificate has expired"
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
Verify return code: 10 (certificate has expired)
实际上清华源也是根证书过期,但是不清楚为什么能用(
看 #1 Rei 的回复里的链接,里面有解释 1.0.x 的 OpenSSL 会遇到这个问题。
建议 openssl version -a
先查看一下 OpenSSL 版本。
openssl s_client -showcerts -connect gems.ruby-china.com:443 -servername gems.ruby-china.com | grep "certificate has expired"
可以用来查看自己是否遇到这个问题。
是不是可以再加一个 RSS 订阅功能?
之前好像听说能混淆,但是不能编译成二进制吧(
可以业余学学 U3D 嘛(
顺便一问,你用 8080 能访问吗?
你进 web 的 docker container 里看看 /var/log/nginx 下面的日志
执行一下:docker-compose logs web
nginx 日志,puma 日志贴上来看看
没复现
现在好了...
Ruby 编程语言的创建者和首席设计师 Yukihiro Matsumoto(松本行弘)近期在某演讲中分享了 Ruby 3 的一些情况。
这个某演讲不就是之前的 RubyConf China 2020 嘛。。。
明白了,当 select 的时候会用 lock 锁住,其它的操作无法进行;只有当获取到就绪 IO 开始执行 select 块中代码时,才会释放 lock,然后就可以在块中继续 register 或者其它操作。
好的
是 Thread B 里的 selector.select do |monitor| block Thread A 里的 monitor = selector.register(socket, :r)
所以如果一旦进行了 select 操作,就只能在 select 块内再进行 register 吗?
BasicSocket.do_not_reverse_lookup = true
这一句的作用具体是什么?
确实是 read 的关系,我弄混了,感谢!
连载(
看着好像软广...
谢谢!
看了一下 DistributedMutex 的测试,确实是允许超时自动释放锁。 @Rei @piecehealth 感谢!
it "handles auto cleanup correctly" do
m = DistributedMutex.new(key)
Discourse.redis.setnx key, Time.now.to_i - 1
start = Time.now.to_i
m.synchronize do
"nop"
end
# no longer than a second
expect(Time.now.to_i).to be <= start + 1
end
那获得锁的线程怎么知道自己的操作时间是否太长呢?正常情况下临界区的操作并不会超时,但是在某些特殊情况下临界区操作会超时(比如临界区在操作 Redis 或者数据库),这种情况下这个线程并不知道自己到底有没有超时吧。
这个 DistributedMutex 的实现是 A 运行超时之后,B 会获取到这个锁,A 运行完毕之后会记录一个 warning 提示持有锁的时间过长。 这样的话 A 和 B 不就都进入到了同一个临界区,这样会出现问题吗?
还是说这个时间其实是一个死锁的时间,只要大于这个时间,任务就基本没有可能执行完毕?
如果 A 在锁过期时间内执行不完,A 可以 extend 锁。
意思是 A 在执行的过程中,需要不断检查当前时间是否大于锁的过期时间吗?如果需要这么做的话应该怎么实现?