太夸张了😅
可能内部用的不是 to_time 而是 Time.parse 之类,我没空深挖了。从现象看就是时区没处理好。我写的话会用显式类型转换。
cover?
实际执行了 begin <= obj <= end
运算,具体来说,是计算 "2025-09-17" <= Time.current - 4.hours
。
"2025-09-17" <= Time.current - 4.hours
会将字符串 "2025-09-17"
转为时间,也就是:
> "2025-09-17".to_time
=> 2025-09-17 00:00:00 +0000
注意时区,当它与 2025-09-17 07:29:45 +0800
比较的时候,结果是 false。
cover? 方法怎么处理时间区间的时区的?
我查文档 UNIQUE NULLS NOT DISTINCT
是指 null 视为同一个值,也就不符合 unique.
https://www.postgresql.org/about/featurematrix/detail/unique-nulls-not-distinct/
不加 NULLS NOT DISTINCT 就符合你需要的插入多个 null。
题外话:我一般把 auth_token 设为 null: false,逻辑更简单。
DHH 在 Rails World 上也展示了 Omarchy
DHH 发行版
这是有可能的,据说 anycable 处理了这个问题,如果是生产环境可以考虑用 anycable https://anycable.io/
我没有用 stream update 来更新是因为累增的 output 会让发送数据量大了很多,于是自定义了一个 action 来只发送新增的部分。
不过 turbo stream 本身的 html 片段相比内容片段还是太大了,还可以直接用 action cable 发送来优化。(我还没做)
这几个 tab 内容是独立的吗?是的话可以写个 stimulus 控制器管理 tab 打开和关闭,然后 tab 内容用 turbo frame 加载,默认下 turbo frame 里面的操作只会影响 frame。
RubyLLM 作者:异步 Ruby 是 AI 应用的未来(而且它已经到来)
用 active job + action cable 实现过一版,如果用 solid cable 会产生很多数据库写入,又不想增加 redis 依赖,所以没用这个方案。
SSE 还有一个好处是终止操作比较好做,客户端断开 SSE,服务端也停止处理就行了。如果是后台 job 就需要跟踪 job id。
我感兴趣 async gem 能不能解决,打算在功能开发完之后再研究。
同样的逻辑,AI 生成的 Ruby 代码少,方便 review,这就是 Ruby 的优势。
编程语言是写给人看的,如果有一天 AI 直接生成机器码不用 review,那么就不需要编程语言了。
楼上都没看内容啊,主题讨论的是“Ruby 写 AI 应用有没有戏”
我最近在写一个 AI 聊天应用,遇到一个问题是要处理流式响应,在 Rails 里为了不阻塞请求需要用线程处理,成本较高。对异步生态的需求比以前更迫切了。
赞👍
公司名和工作地点?
默认 entrypoint 是带 -e 的,所以除了执行迁移的容器其他容器会启动失败。然后 kamal 会隔几秒重试启动,直到超过重试次数。容器启动后健康检查通过才会替换旧容器。
如果有超长时间的迁移,可以关注维护模式这个新功能(未发布) https://github.com/basecamp/kamal/pull/1497
我没验证过,也许 entrypoint 里面失败不影响启动?
确认全局走梯子了没有?
migration 过程有数据库锁,不会重复执行。 https://github.com/rails/rails/pull/22122
我的 kamal 生产环境配置 https://geeknote.net/Rei/posts/3232
build 的时候失败可以把 build 服务器放在境外,然后 push 到境内的 register(例如 aliyun)。
在境内 build 除了 docker 还有 deb,rubygem,npm 的问题,很麻烦。
我是自建 docker 镜像解决的 https://geeknote.net/Rei/posts/3214
37signals 喜欢用 concerns 而且玩得溜。
我是只有公用逻辑才放 concerns。
rails 6 -> 7 使用的 turbo 有变化,用的包不同,属性从 data-* 换成了 data-turbo-*。搜论坛可能会搜到旧的内容。
不知道你看的是哪个版本教程。现在推荐看英文官方的教程 https://guides.rubyonrails.org/ ,目前版本是 8.0.1。要看中文的可以用翻译软件翻译全页。
application.js 打包到一起,某些库体积大又很少变的单独打包,例如 editor,chart。layout 里 include 几个 js 文件。
其实 DHH 即使推 nobuild 也是把所有 js 预加载,可以用浏览器调试看 https://app.hey.com/sign_in ,所有 js 都用了 modulepreload。importmap 默认设置也是 preload。
懒加载会导致交互延迟,体验不好。
list_actions.rb 是个 module,被 include 到 topic_controller.rb 里面调用,调用环境是 topic_contorller。
我依赖好几个 npm 包,importmap 无法很好的支持,所以回到 esbuild 了。
把 stimulus 作为一个包装器,所有 js 库都可以包进去。
stimulus-components 很多组件就是基于这个方法。