以前 unicorn 流行就是因为进程模型简单,但是占内存。在 puma 稳定,并且主流 gem 都实现了线程安全之后,现在流行的就是 puma 多进程 + 多线程模型。未来有希望跟随 Ruby 发展用上 ractor + fiber 的并发模型,但还需要时间。
想说的是,如果你的框架不考虑线程安全问题,只能限定运行的 app server 用多进程模型。
Rack 只是接口,并发是交由 app server 实现,例如 puma 就是多线程模型。如果你要实现框架的话,要在框架层实现并发安全。
回复顶楼问题,你想要的可能是:
Base.newrequest env
cb = Base.route[method][path]
resp = Base.instance_eval(&cb) # cb 在 Base 的实例环境下执行
但这个设计我觉得有问题,多线程环境下 Base 的实例变量会有并发冲突。
类本身是实例,可以有实例变量,叫类实例变量。
关注合并的最新进展 https://bugs.ruby-lang.org/issues/18229
振奋的是 Shopify 组建了一个团队去开发 YJIT。
题外话:可以试试 GeekNote 的合集功能整理系列文章 https://geeknote.net/GeekNote/collections/27
nokogiri 安装的是预编译版,在 linux bundle 锁的是 linux 版,在 mac bundle 锁的是 mac 版。
我没同时用这两个环境不知道怎么解决。如果用 docker 统一环境,我想应该配置 IDE 在 docker 里面执行 rspec。
https://ruby-china.org/topics/41699
其实现在就可以用了。
厉害 👏 关键是能说服 DHH 合并 😂
可以跟 webpacker 一样通过额外的 gem 支持,例如 vite-ruby。进阶选项应该让开发者自己选择。
有的应用适合前后端分离有的适合全栈,Rails 需要为全栈应用开发提供一套合适的方案。
PS: Rails 支持多数据库不就是添加一些配置? https://guides.rubyonrails.org/active_record_multiple_databases.html
楼主混淆了类和实例。
Singleton
用于限制一个类只能生成一个实例,需要使用 #instance
方法获取,得到的是实例。
def self.
和 class << self
设置的是类方法。
attr_accessor
设置的是实例变量。
class CoderA
include Singleton
attr_accessor :worktime
def initialize
@worktime = 996
end
def work
print "work at %d" % self.worktime
end
end
CoderA.instance.work
有很多值得学习的地方。
Rails 增加一个 service 层就是新建一个文件夹那么容易。Rails 的底层就是 Rack,所以我很好奇有什么是 Rack 能做 Rails 不能做的。
Rails 汇聚了大半个 Ruby 社区的智慧,因为一点点问题就自建框架在熟悉 Rails 的人看来只是因小失大,不过这也是个人自由了。
我好奇这个分布式事务实现是在哪一层实施,需要框架层面支持?
这应该要确保数据库保存后才入队。入队之前数据库事务 commit 了没?
哎哟,发现 install 脚本的 gitignore 规则写错了,导致 .keep 文件被忽略了。晚上没人提我就去提个 pr。
错误:
/app/assets/builds
!/app/assets/builds/.keep
正确:
/app/assets/builds/*
!/app/assets/builds/.keep
我觉得就是 cpu 和内存太小,以前不用 docker 我也碰到过过 1 G 内存在编译 gem 的时候卡死。
构建镜像的机器性能要好一点,生产环境资源少就不要放在生产环境编译了。编译好 push 到 registry,然后生产环境拉镜像。
builds 内容应该设置 gitignore,在 assets:precompile 之前编译。
云服务商推 k8s 的一个原因是赚钱吧,如果是买云主机,购买前得看着价格再三确认,如果是 k8s 改个配置就开了一堆计算单元,账单月底见。
另外 k8s 那个复杂度并不适合开发人员管理,面向开发者理想环境的应该是 heroku 或者 DigitalOcean app platform 那样的。国内目前只看见 ucloud 的 cube 有点像,但是它如何更新镜像文档写得不清楚。
投入 docker 我觉得是值得,解决了开发和生产环境依赖一致性和更新的问题。如果是部署在云主机,我相信很少人去更新系统依赖,除非不得已有安全漏洞。
因为 k8s 又贵又难用,我目前一个应用是单机用 docker swarm 部署,装多几台加入 swarm 也很简单。
你看最后一个括号,那才是异常的类
你应该把异常的 message 和类搞混了,终端看到的 SQLite3::SQLException
是 message 的一部分。
可以把完整错误栈信息贴上来看看。
是啊。
Stimulus 发布了 3.0.0-beta1,从 commit 来看现在是 DHH 亲自管。最近也打了鸡血似的更新 Rails 的前端打包方案。
https://github.com/hotwired/stimulus/releases/tag/v3.0.0-beta.1
希望早点找到前端负责人,但要找到同样级别的不容易。
双输,但只要 Basecamp 没倒闭,人还可以再招。
是要把 json 内容作为 response 输出吗?把上面的 JSON.dump 内容作为 body,conntent-type 设置为 application/json
。