清华源也是 lets encrypt 的,就新了 20 天,是不是有什么不同?
信息不充足,把项目 push 到 GitHub 让看看源码。
另外 webpacker 已经预定在下个版本移除,没必要现在学。如果要用 webpack 和 react 独立配置即可,不需要 webpakcer。 https://ruby-china.org/topics/41699
我是用官方源的,而且 Ruby 和系统都是比较新的应该不会遇到这个问题。
let's encrypt 的旧根证书过期,需要更新客户端 https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/
尝试更新 rubygem,Ruby 版本或系统的 ca bundle。
param = 200
给 param 赋予了一个新的 object,所以没有改变 count 的值。
Integer 类型不能改变自身,要用一些可以改变自身的类型,例如 Hash 或者自己创建一个类:
data = { count: 500 }
proc = Proc.new { |params|
params[:count] = 200
}
proc.call(data)
puts data[:count]
#=> 200
这是不正常的,先搞清楚目前在用什么机制,importmap 吗?
app server 的多线程是为了提高并发,不然前一个请求完成之前,后面来的请求都要阻塞。
用 docker 就不用管 buildpack 支不支持了
以前 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 之前编译。