好!好久没办了!
可以编译到 YARV 字节码。但实际上还是可以反编译的,虽然现在还没有完整的工具链来做反编译。对于大型项目的字节码打包现在 @darkkowalski 有一个在进行的 proposal。
来 open 在请求小文件的时候返回 StringIO 对象
原理上,这对于一个默认直接返回 String
的 API 是一个很难处理的问题。因为假设所有情况都返回 String
的话,读取到 Content-Length > Body Size
的话就意味着要继续读取,直到读完为止才能返回。而理论上 HTTP 的 Content-Length
上 GB 上 TB 都没有问题,所以大多数库的返回是默认 StringIO
,根据你具体需要不需要读,甚至需要不需要流式读取自行决定怎么处理。
报名
这样做总感觉性能上会出事... Postgres 的话有 recursive cte query 可以一句 SQL 查出来,还会复用内存结构,比较快。Rails 上有对应的 ORM 库,可以找一下。
Ractor 的 Experimental 确实指的就是楼主提到的这种情况。
仔细看了一下楼主提的 Issues 的后续 https://bugs.ruby-lang.org/issues/17612
问题出在浮点数转字符串的实现 https://github.com/ruby/ruby/blob/3acc81d9e41b18380b9e0168fe2b5e5e0c727256/missing/dtoa.c 没有正确处理多线程下数据竞争的情况
这个代码是一段经典的开源代码 gdtoa (David M. Gay's floating-point conversion library) 的修改。 Ractor 中 Float 是一种可以直接传递的 Number,默认是线程安全的。但是因为这个依赖库中这里没有处理,所以导致了问题。
Ractor 现在这个 Experimental 状态基本就是在测试这些边缘情况的问题,去年 MJIT 的测试状态差不多也是这样的。写着写着就 SegFault,然后一调试都是一些很怪的小问题。这个问题在 Ruby 3.0.2 中被修复。
这个提议好,可以
确实是写错了
# frozen_string_literal: true
# ApproximateCount count on large Postgres tables
# designed to be `extend` into inheritance classes of ActiveRecord::Base
# Example:
# User.approximate_count
# # (1.3ms) EXPLAIN (FORMAT JSON) SELECT "users".* FROM "users"
# # (0.8ms) SELECT COUNT(*) FROM "users"
# # => 0
#
# User.where('created_at > ?', 7.days.ago).approximate_count
# # (1.6ms) EXPLAIN (FORMAT JSON) SELECT "users".* FROM "users" WHERE (created_at > '2021-06-11 15:20:49.870311')
# # (0.8ms) SELECT COUNT(*) FROM "users" WHERE (created_at > '2021-06-11 15:20:49.870311')
# # => 0
module ApproximateCount
def approximate_count(threshold=10_000)
explain_sql = "EXPLAIN (FORMAT JSON) #{all.to_sql}"
result = self.connection.execute(explain_sql)[0]["QUERY PLAN"]
json = JSON.parse(result)
val = json[0]["Plan"]["Plan Rows"].to_i
return val if val > threshold
self.count
end
end
class ApplicationRecord < ActiveRecord::Base
extend ApproximateCount
self.abstract_class = true
end
施加了一点点魔法
这个发在 Rails 板块是不是有点...
镐头封面那本书太老了,最新的也才适配到 Ruby 2.0。
是并行执行的 Boehm GC...
确实,这个堆内存管理一塌糊涂,连我一直骂的 Go 语言的 GC 都能比它快... 比校建议索性加上 nogc 的 flag,多实例然后每几个小时重启一下程序比校可靠。
2021 年一门需要 GC 的语言,默认使用不做任何额外优化的 Boehm GC,还说自己已经跳到 1.0 版本了,真的是闻所未闻。真要说什么 runtime 能那么猛,恐怕只有 Unity 里用的 Mono 了,老 Unity 游戏长时间运行都会 Stop the World,但人家 2019 年至少也加上了 Incremental 的支持...
随着启动时间越来越长,内存不断增长,但如果慢慢稳定到一个定值的话,可能要怀疑内存碎片的问题,Ruby 2.7 开始引入 GC.compact
来回收碎片,但是代价非常大,会暂停好几秒业务,只能在没有业务的时候手动触发。如果每天都在线性增长的话,应该是 memory leak 了,需要排查程序中的 bug。万不得已,workers killer 定时重启。
广场协议...
Ruby 当 CLI 工具用每次都要手动禁用掉 standard library,否则光 standard library 加上启动就要差几秒。
TruffleRuby 性能上要比 CRuby 要好很多指的是 CPU-bound 的计算密集型应用。先不用跑 Rails,基本上 Rack-based Web 服务器都很难从中受益。
久闻贵司大名(指在 Aston Martin AMR21 的涂装上见过这间公司的 Logo
按照我们去年的经验,讲者需要提前录制视频避免演讲过程中的网络问题;然后我们会提前调试,然后在视频播放完毕前 15 分钟线上 zoom 连线讲者准备直播的 Q&A 环节。但如果是远程观众的话,去年是通过 YouTube 和国内 UCloud ULive 进行的直播,今年考虑到酒店场地网络问题,目前无法保证会有提供线上的观众直播的计划。
#23 你改的代码本来就是你本地的 clone,不管怎么改都不会直接出现在真实项目里... 看这个 RubyMine 的项目结构顶上的项目名重命名感觉是有问题的,你需要确定你的 RubyMine 正在读取你正确目录下的代码
#8 的错误应该是没有在新项目下执行 bundle install
安装依赖,所以没办法 bundle exec xxxxxx
#12 的错误你应该要看一下别的能工作的地方是怎么调用 redis 的,在业务代码中应该是不会出现新的 redis 连接的,这里明显是新建了 redis 连接,可能读取了错误的配置文件然后出问题的
src_dev
和 src_test
目录是同一个项目吗?我看一开始的报错是 src_test
这个项目,后来变成 src_dev
了?
就是 dashboards_controller.rb
需要在 app/controllers/admin/
这个文件夹下面。Rails 是惰性加载文件的,根据执行过程中你的类名来决定从哪个文件里读取你的代码。
看起来是路径名错了,还是回到一开始的那条错误。
rails 期望 Admin::DashboardsController 这个类应当出现在 app/controllers/admin/dashboards_controller.rb
这个文件里。
看 RubyMine 的截图文件名是对的,但 dashboards_controller.rb 可能不在 /controllers/admin 这个文件夹下面
default gem contributor 必须要来投稿啊(
那就是旅游公司了(
我推荐这个方法,而且很好实施
之前用过一个 function 来把 explain 的估计 count 值拿出来。但还没想到这个 format json 的操作,这个可以拼接任意条件查询了,之前写法要是这么拼有注入风险。
把晚上 RubyTuesday 的架构搭出来了,用苹果自带的功能把 iOS 输出作为 macOS 的 Audio Input,再用 Audio Hijack 做劫持,就能同时在 Clubhouse 和其它平台同步播出了。避免了有人没有邀请码或者 iOS 设备的尴尬。