不用,我用 ubuntu 镜像然后装源里面的 ruby。如果需要特定 ruby 版本就用 ruby 的镜像。
现在开发环境已经需要四个进程,Rails,sidekiq,scss,esbuild,另开终端已经显得麻烦了。
Rails css/js-buundling 默认用 foreman 启动开发进程,因为 foreman 是 Ruby gem。
对我来说 docker 是更好的选择,开发环境用 docker compose,生产环境用 docekr swarm。
foreman 是开发环境用的,作者曾经在 heroku 工作,所以 Profile 和 heroku 的格式一样。
生产环境应该 export 到系统的管理配置,例如 upstart,stystemd http://ddollar.github.io/foreman/#EXPORT-FORMATS
foreman 诞生的时候 systemd 还没成为主流。
清华源也是 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 了没?