Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
Peter
@Peter
高级会员
第 1553 位会员 / 2012-03-23

长沙
106 篇帖子 / 1469 条回帖
39 关注者
0 正在关注
322 收藏
打赏作者
未设置 GitHub 信息。
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • 请教。怎么推广一个 gem 呢?我的一个 gem s_matix 是有什么硬伤让其不容易被收录和推荐呢? at 2025年05月20日

    粗略看了一下,是个用 map 和 vector 的轮子,CRUD 只实现了 C, 目的是为了解决 Ruby String 对象的内存占用问题,特别是重复对象和空值。

    所以 Readme 中提到的 480MB 的 Ruby 内存占用我不知道你是不是用了 freeze 或 # frozen_string_literal: true, 另外,Ruby 3.4 默认设置了 frozen_string_literal 为 true, 如果你有 1440000 个字符串,可以升级 Ruby 看一下内存占用。

    你的 gem 在我看来只适合你的特定场景,一个健壮的 rails 系统要尽量减少 gem, 如果内存溢出,得排查老半天,如果不是自己写的 gem, 灾难程度还要升级。

    因为内存的特性,内存中的数据只适合做缓存,如果真要在本地用几百 MB 的缓存,我可以在本地装个 Redis 就可以了,Redis 默认还有持久化,速度也能保证。当然,我最先会考虑 ActiveSupport::Cache::MemoryStore, Redis 都不会装。

    MemoryStore 的 ruby 对象设计也很优雅,内存限制内不会被清理,超过设定值后,最久未使用(LRU)项会被清理。现在内存这么便宜,我在欧洲 OVH 16 欧元/月的服务器都是 64 GB 内存,为什么还要折腾代码?

  • AI 歌曲生成器 at 2025年05月18日

    打开看到的好像是 西班牙语,还没办法切换。学 乔布斯 做减法?是不是有点过了?

  • 请教。怎么推广一个 gem 呢?我的一个 gem s_matix 是有什么硬伤让其不容易被收录和推荐呢? at 2025年05月18日

    ActiveSupport::Cache::MemoryStore 已经实现了这个功能。Ruby 现在几乎等同于 Rails, 所以用不到你这个 Gem 吧。

  • 今天开源一个博客引擎,助您使用 Markdown 和 Git 进行博客写作 at 2025年04月20日

    css 挂了

  • 2024 年了,我还在用薄荷 18 年分享的 10 条最差实践建功立业😂 at 2024年12月21日

    Rails 这边是 unique 的,数据库 migration 那边应该同时加上约束吧。擦皮鞋哪有只擦一只的道理,只擦一只鞋不应该过 Pull request。😀

    有些高并发并且不要求 unique 的情况下,也可能造成数据混乱,比如要求只能一个 worker 处理一个对象的数据,但 workers 从一个任务池拿任务时,有可能多个 workers 先后拿到同一个对象不同的耗时任务,因为这个对象可能前前后后有很多任务,这时候用最简单的 advisory_lock 就可以避免了,可以用对象的 id 做 锁的 key。

    https://dev.mysql.com/doc/refman/9.1/en/locking-functions.html

    任务开始的时候用 IS_FREE_LOCK('#{id}') 查一下,如果 free 就 get_advisory_lock, 最后 ensure 一下 release_advisory_lock

    ActiveRecord::Base.connection.get_advisory_lock(id)
    ActiveRecord::Base.connection.release_advisory_lock(id)
    

    这样就保证了只有一个 worker 能处理这个耗时任务,其它的 works 拿到这个对象的任务时,要把这个任务放回任务池。

    https://apidock.com/rails/ActiveRecord/ConnectionAdapters/AbstractAdapter/get_advisory_lock

  • 2024 年了,我还在用薄荷 18 年分享的 10 条最差实践建功立业😂 at 2024年12月12日

    Quote: “如果不是经常更新的内容,比如首页的 Banner 和广告这类首页接口,并发量最大,而且更新少”

    常更新的也没有问题,设置好过期时间就行了,一小时更新一次,一天也就 24 次,虽然每个 puma 进程都管理自己的 cache,比如说有 8 个 puma 进程,同一个缓存就要重复保存 8 次,那一天也只更新 24*8 = 192 次,但现在内存这么便宜,数据库又放在 ssd 上,不用太在乎。

    Rails 官方的文档不建议在生产环境中使用 MemoryStore 是因为多进程或多服务器之间不能共享缓存,另外就是上面说的会浪费内存。理解了原因就可以打破规则了。

    我经手的一个生产环境的 k8s 里有十几台 64GB 的 rails 服务器,直接配置的 MemoryStore 作为 Cache, 再用另外的全局变量 redis_client 连接 Redis cluster 用来处理经常变动 (1 小时以下,一般是分钟以下,秒级别) 的缓存,目前运行得非常稳。

    对于那种又大又不定期更新的缓存,还希望能在各进程和服务器间同步更新,并且不希望把这么大的缓存存在 redis,也有办法:

    1. 例如把 Category.all 保存在 MemoryStore 的 :categories_cache 中,永不过期,另外再把缓存生成的时间保存在 :categories_lazy_updated_at 中,永不过期。
    2. 在更新 model 的同时,用 after_save 钩子在 Redis 中更新一个对应的键 categories_redis_updated_at,值就是当下的 timestamp,在各个服务器每个进程中的 MemoryStore 缓存这个 Redis 的键值对,键名 :categories_eager_updated_at,过期时间一分钟或你期望的间隔。

    3. 每次读取 :categories_cache 时都比较 :categories_lazy_updated_at 和 :categories_eager_updated_at 的值,这个过程都在本地,时间忽略不计,如果前者小于后者,说明 Category 已经更新了,那重新生成缓存 :category_cache,再把 :categories_lazy_updated_at 的值更新为 categories_eager_updated_at 的值,其实也是categories_redis_updated_at 的值。

    这样在 Redis 中只用了一个 timestamp 就在极小的间隔同步了各个进程和各个服务器之间的缓存更新。如果有多个这样的缓存,还可以优化,比如把多个缓存的 timestamps 组成一个 hash 放在 Redis 的一个键中。我最后还做了一个页面,所有的缓存都一目了然,包括值,占用空间大小,过期时间,当然页面中的本地缓存只是某一台服务器中某一个 puma 进程中的值 😅

    Rails 的 MemoryStore 效率奇高,因为以前内存贵 HDD 慢,一直在业界没好好利用,我看完源码后觉得现在不在生产环境用真是太浪费了,特别是那些大块头又常年不更新的缓存,现在它们极大概率可以在 garbage collection 中 survive。

  • 你们都用哪个 Linux 发行版? at 2024年03月25日

    沉下心来好好学习了一下这个 docker 示例以后,坚定成为 docker 党。

    Rails dev prod 和 docker-compose 用同一个.env 配置文件。开发环境生产环境完全一致,操作系统 Win Mac Linux 完全无关,升级各种软件环境只要改文本配置。

    一次学习,之后完全不在这方面耗任何时间,强烈推荐。

    https://github.com/nickjj/docker-rails-example

  • 想省事儿还是得虚拟机或者 mac,试了一下 wsl,刚装好就发现浏览器不能上网了 at 2024年03月08日

    “做”和“做到极致”是两个不同的概念。如果你耐心看完所有内容,相信你会认同那么多 star. 不然你可以开个 repo, 我给你 star.

  • 想省事儿还是得虚拟机或者 mac,试了一下 wsl,刚装好就发现浏览器不能上网了 at 2024年03月02日

    这哥们是 docker 船长,真把 docker 玩明白了,比 Rails 官方还玩得明白,我深度使用后觉得值得推荐。
    https://github.com/nickjj/docker-rails-example

    我的 pg 和 redis 没放 docker. 但我有一个 python 项目把 pg 和 redis 放在 docker 里,数据文件存母机,大小过 TB, 运行得也非常稳。

  • 2024 年了,这样的极简 API 你喜欢么 at 2024年01月13日

    赞,很好的项目,如果在开发的时候,顺便做个笔记,那将会是一个很好的初学者教程。

    如果我会搭,那我会自己搭一个,而不是用你的,因为总有一些需求/细节跟你不一样。

    如果我不会搭,那就更不会用你的了,有耐心想学的话,可能要从头爬你的 commits.

  • 菜鸡的单词卡片 at 2023年10月18日

    cool
    是 MIT 吗?没有 License 信息。

    https://choosealicense.com/licenses/mit/

  • 做了一个可以在命令行查看大饼价格的 gem at 2023年10月14日

    点赞👍

    要不要把这个翻译成 ruby? https://github.com/ccxt/ccxt

  • 开发一个类似 logdown 的博客网站 loglearn at 2023年08月22日

    也许把你实现的方法分享出来才对大家更有帮助吧?

  • 在垃圾回收时,Ruby 是否会"stop the world"? at 2023年03月23日

    https://jemma.dev/blog/gc-incremental

  • 跨境远程工作如何收工资外汇和缴五险一金? at 2023年03月03日

    很好的想法。想知道相对我自己注册公司,你们有什么优势。这也应该是你们宣传的重点吧。

  • CommitGPT at 2023年02月28日

    这个好像不容易。
    最简单的方式就是选 n, 然后 copy paste.
    程序方面,可能可以加个 e 选项,打开默认编辑器编辑 commit 信息,我有空试一下。

  • 解决搜索问题就一定要上 ElasticSearch 吗? at 2023年02月20日

    https://github.com/baygeldin/tantiny

  • 视频分享:用 Docked Rails CLI 启动新手环境 at 2023年02月19日

    谢谢 Rei 对中文 Rails 圈的贡献 👍

    另外挑个骨头:alias 重音在最前面。 http://dict.cn/alias

  • 用 Ruby 比较不好的一点就是没有一个满意的编辑器 at 2023年02月11日

    RubyMine 家的授权比较特殊,个人版可以在公司用,公司版又贵很多,公司又不能私下给我点钱买个人版。 最后公司给我买的公司版,贵是贵了点,但都合规。

    用了 RubyMine 就不想换了,Debug 下断点太方便了,包括 RSpec 也能下断点,再也不用 binding.pry 了。

    好像 VS Code 也能下断点,没空研究,但猜测应该不如 RubyMine,希望我错了。

    跳转也很方便,当然遇到个 小明 小红 小帅 的方法名,那就要在一堆列表里找了。

  • Ruby 3.2 带来的 YJIT 性能提升提升 ~40% at 2023年01月05日

    请问是 #10 楼说的那样使用源码编译,加上 --enable-yjit 吗?

  • 求助:怎样将搜狗词库 scel 格式文件转为 txt? at 2022年07月15日

    我也不会,但可以看别人的代码: https://github.com/howl-anderson/scel2txt

  • 第一期 Ruby on Rails 中高级程序员训练营招生啦 at 2022年07月15日

    现在中国 ruby 程序员的工资大概在什么水平? 我在德国,一般的程序员,税前大概 6 万欧左右,德国税重保险贵,能扣一少半。其实我所在的公司也想招远程,但这工资水平,感觉国内的人看不上。

  • 谨防 ActiveSupport::Cache::Store 缓存 nil 值 at 2022年06月09日

    https://edgeapi.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch

    Rails 6.0 以后有 skip_nil 选项了。

  • Ruby 开发人员流失严重 at 2022年02月02日

    请问是这个项目吗? https://github.com/1c7/Translate-Subtitle-File

  • 做了一个简单的小视频介绍如何在 View 里显示 local_time 本地时间 at 2022年01月16日

    向你学习!英语的受众的确广很多!

  • Ruby 开发人员流失严重 at 2022年01月13日

    感觉前 100 中,除了我都自由了,沙滩晒太阳太忙了,没时间上网

  • Ruby 开发人员流失严重 at 2022年01月13日

    热心管理员上线了!

  • 用 C++14 写了个模糊查找命令行工具 at 2022年01月03日

    谢谢 👍 ,忘记看 Test 了,最好还是写在 Readme.md 吧。

  • 用 C++14 写了个模糊查找命令行工具 at 2022年01月02日

    👍 在 macOS 下试用了一下,发现不能通过键盘上下键移动选中行,只能通过 touchpad,估计鼠标也可以。

  • 1
  • 2
  • 3
  • …
  • 46
  • 47
  • 下一页
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English