18 年的时候,干了半年 PHP 跑路的我找不到几个好的下家了,看到有家外包公司招 PHP 说后期要转 Ruby,有点好奇。因为当时用的 Laravel,对 Laravel 的好感是写起来比 TP 优雅,听说过 Laravel 也是借鉴的 Rails,心想那可以一学,于是在一位大佬的指导下入了这个坑 :)
多谢 Rei 大捧场:)
manjaro i3,装 rails 没啥问题。你可以把错误贴出来看看
可以试试看这里边的配置:https://mini-geek.com/posts/32 。有段时间没验证了,按理说是能用的。
也许 DHH 也逛 ruby china: Default to creating GitHub CI files。
到时候 Rails 8 要加入一堆开箱即用的东西了(登陆鉴权代码的 Generator (待),安全检测的 Brakeman ,默认的 Rubocop 规则,自带的接口限流方案,默认的 Github Action 模板),吃螃蟹可以 rails new demo --main
奇怪的比喻...差不多吧
在现有的博客项目里边试了下,没啥问题。项目前端用的是 cssbundling(bootstrap) + jsbundling(esbuild) 的模式。
这里说下引入所做的改动:
在 layout/admin/application.html.erb
的 head 标签里边加两行代码:
<%= turbo_refreshes_with method: :morph, scroll: :preserve %>
<%= yield :head %>
然后修改 Gemfile
里边 turbo 版本:
# gem "turbo-rails"
gem "turbo-rails", "~> 2.0.0.pre.beta.1"
执行安装命令
bundle i
再修改 package.json
里边 turbo 版本(json 不能注释,这里注释方便理解):
// "@hotwired/turbo-rails": "^7.1.3",
"@hotwired/turbo-rails": "^8.0.0-beta.1",
执行安装命令
yarn install
完事
两行代码免费升级用户体验和开发体验 ,这很 Rails
这里说到 rails 的兼容性问题在 7.1 之后解决了
https://socketry.github.io/async/guides/compatibility/index.html#rails
其实就像 Rei 说的,应该用 Stimulus。Stimulus 的 target 也有 connected 钩子
国内一些 docker 镜像服务商也可以用。我用的阿里云的容器镜像服务,虽然免费版只提供三个免费的命名空间,但是好像每个命名空间下的仓库是没有限制的,也可以创建私有的仓库。
前段时间看到一篇防坑指南写得挺好的:How to avoid getting ripped off by a client
我也还没有去深入地了解(逃,但是这里有篇文章介绍得还可以:https://nathankjer.com/introduction-to-langchain/,可以了解一下
Ruby 还是有 LangChain 的包的:https://github.com/andreibondarev/langchainrb
文件夹和命名空间没对上,在 concern 里边新建一个文件夹 one_test,再把这个文件放进去
应该是 npm 版本太低的问题,低版本的 npm 生成的 package.json 里边没有 build,升级下 npm 再重新生成项目就有了
可以在 nginx 的配置里边添加拦截规则,不想给访问直接都给返回 403,类似:
server {
#...
server_name example.com;
location ~ /\.git {
return 403;
}
# ...
}
一般来说 puma 的线程数固定在 5 就够了。进程数可以根据实际情况设置,不一定总是等于 CPU 的超线程数,也有可能需要小于,进程数大多数情况下甚至可以设置到 1.25x ~ 1.5x 的超线程数。
It’s frequently said that you shouldn’t have more child processes per server than CPUs. This is only partly true. It’s a good starting point, but actual CPU usage is the metric you should watch and optimize. In practice, most applications will probably settle at a process count that is 1.25-1.5x the number of available hyperthreads.
On Heroku, use log-runtime-metrics to get a CPU load metric written to your logs. I would look at the 5 and 15 minute load averages - if they are consistently close to or higher than 1, you are maxing out CPU and need to reduce child process counts.
关于 puma 的配置可以参考这篇文章: https://www.speedshop.co/2017/10/12/appserver.html。内容大概就是介绍了 puma 线程数和进程数的配置,还有如何开启 puma 的 cow 以节省进程内存占用,以及容器大小相关的配置。文章作者也是 puma 的维护者
之前看的一本书《软件随想录》刚好有讲到这一点,作者是 Joel Spolsky,原本在微软工作,后来出来自己创业开了公司,这家公司现在比较知名的产品是 Stack Overflow,Stack Exchange 还有 Trello。原文是这样说的:
那时,我的想法是,天啊,世界上有数不清的程序故障追踪软件,每个程序员都写过一个用来除错的小工具,为什么别人会来买我们的产品呢?有一件事我是知道的,那就是程序员在创业的时候,通常有一个坏习惯,认为其他人都是与他一样的人,有跟他一样的需求。所以程序员创业就会出现一个不健康的倾向,即喜欢出售编程工具。这就是为什么你会看到,世界上有那么多可怜兮兮的小公司专门兜售奇奇怪怪的源码生成工具、奇奇怪怪的错误捕获和通知工具、奇奇怪怪的除错工具、奇奇怪怪的代码分色显示编辑器、奇奇怪怪的 FTP 工具,嗯,以及故障追踪系统工具包。所有这一类的玩意,只有程序员才会喜欢。我才不要掉进这个陷阱呢!
这段话的背景是:当时他自学 ASP 的时候,制作了一个软件故障追踪系统叫 FogBugz。他在自己的公司里边使用它,并逐步完善它。后来有朋友问他能不能复制一份给他们公司用。因为原本代码只是针对他自己的公司使用的,不具备通用性。于是他跟他的朋友说:他可以修改代码,让它在别的公司也能使用,但是要给他 5000 美元的劳务费。同样的事发生了几次之后,他就有了把 FogBugz 变成一个产品的想法。最后 FogBugz 成了那段时间他们公司主要盈利的产品。
rubymine + ideavim
thx ~
或者用模型的钩子处理?
class Article < ActiveRecord
before_validation :convert_tag_ids_to_array, if: ->{ tag_ids.is_a?(String) && tag_ids.present? }
private
def convert_tag_ids_to_array
self.tag_ids = tag_ids.split(",").compact.uniq.map(&:to_i)
end
end
如果是 if !true
我会写成 unless true
多个条件的话还是不要用 unless 的好,很容易看错,而且可读性太差。
主要是想用 k8s,另外之前看这篇文章 https://www.zhouzhou.net/2021/11/ 说 serverless 还有些问题
最后一根稻草
热闹点也挺好的
好吧
ruby china 安卓客户端还是不行