默认 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 很多组件就是基于这个方法。
环境变量问题,需要在 config/deploy.yml
设置
env:
clear:
DB_USER: app
secret:
- DB_PASSWORD
这里设置了的环境变量才会 push 到远程服务器。
反向代理问题,单机情况下 kamal_proxy 可以替代 nginx,去掉 nginx。
kaml_proxy 不需要设置就可以满足 rails 需要。
AI 也需要提问的智慧。我很乐意推荐不好好准备提问的人去问 AI。
主要是网络,好的网络体验大不相同。我有次调试 cloudflare 的边缘节点居然是连到英国,绕地球一圈。
看 @RaySong 有无兴趣搬运?
把图片塞到 job 的参数,小心 redis 内存不够用。
job 的参数是 data:image?不建议参数用太大的对象。把对象保存以后传 id。
basecamp 是用独立的 db 做 cache db。用 db 的好处是缓存周期可以设很长。
我现在写博客主要作为自己外部记忆,顺便给别人看看。
是 Rails cache 的一个实现,类似的可以存 memcache,redis,solidcache 是存到数据库。
Rails 8 刚发布,回归好时机。
Rails 8 的前端方案完善,简化部署配置,减少了依赖服务。要入门和回归的话这就是最好的版本。
Ruby 需要更多布道者👏
docker + devcontainer。
大企业前后端分离的,可以用在管理后台。
暂时没遇到,我之后留意一下。
Stimulus 如果进行了 dom 操作,也需要注意历史恢复的状态。相比之下 Lit 只需要 render 简单多了。
我第一份工作还是 2011 年,当时 Rails 是个时髦的技术。我毕业后半年没找工作鼓捣些开源项目,后来觉得还是要找个工作获得收入。于是看招聘信息,当时一位国内有名的 Rails 布道者的公司在招聘,我就写邮件交了份简历,然后就让我去北京入职了。