构建有一个过程,需要等待。编译完会自动安装 make install ....
结束就好了
emmm…… 是这样
1.Portable Ruby 可能更高级一点
比如你想把 Ruby+Rails+ 你的应用,带着走。用上面的可能合适。
但是没必要,因为你在学习 Rails 不要把自己放在这些奇怪的情境中。
2.如果你只想正常运行 ruby,开发 Rails,而且不想遇到 sudo 问题
我推荐 asdf,这也是我本人开发用的个 asdf 可以管理多个语言、数据库、任何版本相关的。
1)在这里 https://asdf-vm.com/ 安装 asdf
2)添加 ruby
https://github.com/asdf-vm/asdf-ruby
不过可能有点过时。在安装依赖这部分。Ruby 3.3.1 依赖 openssl@3 这是重点。
# 安装前置依赖
# ruby-build 是安装工具
# openssl@3 readline libyaml gmp 是必要的依赖
# rust 是 YJIT 必要的依赖,不装就不会构建 YJIT 功能
brew install ruby-build openssl@3 readline libyaml gmp rust
补一篇《使用 Ruby-build 在 MacOS 上 编译 Portable Ruby》https://ruby-china.org/topics/43710
随便试试,可以用 Ruby build 安装到任意路径,可移除。
# step1: 安装前置依赖
# ruby-build 是安装工具
# openssl@3 readline libyaml gmp 是必要的依赖
# rust 是 YJIT 必要的依赖
brew install ruby-build openssl@3 readline libyaml gmp rust
# step2: 编译安装
# $HOME/ruby 替换成你要安装的目录
# 搜索到 ruby 需要把 $HOME/ruby/bin 添加到到你的 PATH
ruby-build 3.3.1 $HOME/ruby
长期使用,推荐 asdf 安装,统一管理。ruby 插件的底层依然是 ruby-build
今天我在群里,提出了类似的问题。
Ruby 在 MacOS 上的安装,有点不友好。
不如 Python、Java 简单粗暴
《Ruby 基础教程(第 5 版)》 https://www.ituring.com.cn/book/1843
CRuby 内部只要是 Ruby 代码,有 GIL 锁,自带线程安全。
运行的是 Ruby 代码,多线程,只会轮替的使用一个核心。
Sinatra 挺好,保持很好的可读性
Roda 可读性不太好
服务器 Debian、Ubuntu
桌面 Linux Mint
Docker 镜像 Debian、Ubuntu、Alphine
比如你的实例 叫 instance
instance.class.ancestors.each {|klass| puts klass.instance_variables}
外国人比机器贵。价格不敏感。这样想想是不是就合理了。
COOL!
能否分享下,Ruby 的 GUI 应用如何解决打包、安装、跨平台分发的问题?
我有个理论就是寄生性语言都会死掉。
从 CoffeScript 开始,即使是今天热度很高的 TypeScript。他们都会因为 JavaScript 不断完善而被淘汰掉。
归根结底还是因为浏览器执行的就是 JavaScript,绑定 UI 的语言使用的是单线程的模型,不同于其他语言,思维方式不同。其他语言即使去封装,比如用 Ruby 语法写 JavaScript,最后结果就是:你不仅要关心 Ruby 还要关心 JavaScript 还要关心他们之间的差异和版本区别,痛苦翻倍。
如果你已经理解 JavaScript,还不如去写 JavaScript。最后就会发现这样的换写毫无意义。
除非 Ruby 被浏览器支持。但是不太可能。浏览器是比操作系统甚至还复杂的软件,他的更新换代周期很慢,牵扯很多,往往是厂商们博弈后的结果。最后,你没什么选择。市场现状也说明了这个问题。
做过一个类似的:
https://github.com/Mark24Code/vistual_call
举个例子,包在关心的部分,可以获得该处调用的图:
require "sinatra"
require_relative "vistual_call"
VistualCall.trace(theme: :lemon) do
get "/" do
"hello"
end
end
+1 看 Ruby 资料最有趣的点在于,留下来的都是经得住时间考验的。
特性在试验中:
** Sets the storage hash for the fiber. This feature is experimental and may change in the future. **
不过依然可以给出例子
# Fiber#storage 例子
# https://devdocs.io/ruby~3.2/fiber#method-i-storage
puts "start..."
def work
puts "work,running...."
puts "work,set :tmp_value"
# 可以携带数据,一直保持在这个 Fiber 中
Fiber.current.storage = {
payload: "some data"
}
puts "work,do some thing...."
puts "work: tmp_value" ,Fiber.current.storage
Fiber.yield 12
puts "work,come back"
puts "tmp_value:",Fiber.current.storage
end
puts "start...(before fiber)"
fiber = Fiber.new {
work
}
fiber.resume
puts "back to main"
puts fiber.resume
puts "the end"
运行结果
start...
start...(before fiber)
work,running....
work,set :tmp_value
work,do some thing....
work: tmp_value
{:payload=>"some data"} # 携带数据
back to main # 切换会主干执行
work,come back # 切换回 fiber
tmp_value:
{:payload=>"some data"} # 数据还在
the end
前端的方案有成本优势。 通过接口获得差异数据,前端动态生成 diff 组件。充分利用客户端算力。
后端的方案,压力全部自己扛。看钞能力。
Fiber#current: https://devdocs.io/ruby~3/fiber#method-c-current
我想看看楼主的技术分享。感觉也快用到了。真的是三端合一,这样的话,很有吸引力。
这里 PC、Mobile 完全不同,一套代码的意思是:
1.相同的代码,不同布局 2.写 2 份,根据设备情况各自分开展示
是哪种?
Thread.current,Fiber.current 往上面绑变量?
同意楼上。DHH 总是结合实践来说明问题。
前端娱乐圈总是嘴嗨更多。
如果观点不能跟随现实发生改变,其实就是一种固执己见,偏执人格障碍。
这个问题其实很简单,当网线足够宽,以前的那些省流的骚操作当然可以一并去掉了。就像现在,电话线上网那时候的“下载器”很少被人提起;直播、网上看剧成了主流。
其实是一样的。
基础设施好了,辅助设施就可以下架了。
updated
@Rei 申请加精
@Rei 申请加精
Ruby 自带的 ERB 都没法 嵌套。 Rails 打了补丁可以。 比如在 Sinatra 里用裸的 ERB 就很难受。
请问 Roda 里面怎么减少这种 模块嵌套地狱的写法?
小缅北 😂