• 一看就有很多实战经验。

    【代码】任何 secret 不能硬编码到代码,小到短信 template_id,大到 jwt_secret,优先放环境变量,其次放数据库

    现在的 rails 自带 credentials 管理。大部分 secret 都能放里面,然后用 Rails.application.credentials 获取。

  • 其实还是要问前端:他们这样做到底是想实现什么样的效果,解决什么样的问题。也许他们担心的问题早就有成熟稳健的解决方式了。

  • “前端加密密码”, 几乎就是自欺欺人。
    如果前端将密码”123456“加密成”zxdfasdf"这样的字符串,那么该字符串才是真正的密码明文。绕过 UI 层,通过 curl 之类的工具用该“加密后的字符串”就可登陆。

    前端要这样搞,那么所有的密码相关接口,包括注册,登陆,重置密码等接口操作,必须保持统一。然而这样会导致很大的开发心智负担。假如现在需要另一个团队开发配套的管理后台,这个团队并不了解之前的前端加密操作,那么在涉及到“密码”的功能时,可能会出现非常诡异的 bug. 我们曾经遇到过一个需求,后台管理员生成一段随机字符串重置指定用户的密码,并自动通过邮件发送该密码给用户。而管理后台并不是前端团队开发的,试想如果前端有这个加密操作,而这个信息并没有同步到管理后台的团队,那么会发生什么。

  • 短暂时间用过 prisma, 但是确实没感受到"次世代"先进的地方在哪

  • 牛而逼之!居然能跨专业跨成这样

  • 原来有认证相关的 gem 啊😅 , 几年前找过没咋找到。

    同不推荐 devise, 多年前写过的一个 graphql 项目用了 graphql-devise, 上游依赖了 devise-token-auth 和 devise, 需要扩展功能的时候和 debug 的时候,需要把这几个 gem 的文档查一遍才好下手,而且在 devise 的基础上写的代码总是相当的不直观。自己搞熟了还将就能用,但是组里的新人在面对这一套东西会非常迷茫,学习成本相当高。后来在集成 oauth 的时候觉得这一套东西实在太重太卡手干脆就自己写了。

  • 有些技能跟我司很契合,如果能留下一些证明代码水平的作品的话就好了

  • 运动级回旋镖指南 at 2024年03月05日

    实际门槛比一般人想象的高。一个不常运动的成年人可能需要个把星期才能摸到入门镖的门槛

  • 运动级回旋镖指南 at 2024年02月21日

    玩儿童镖就没那么危险了。

    虽然飞盘和镖都能飞,但其实区别挺大,飞盘是团体运动,需要找到技术不错的小伙伴才能玩的痛快,不然只能满地捡盘

  • 自己部署的 Sentry,CSRF at 2024年01月11日

    上 rollbar

  • 最终使用实例的时候看到到处访问一些属性

    你看到的"属性"并不是实例变量,而是方法。

    ruby 语言中并不太常用"属性"一词。代码中看到的形如 obj.size, obj.price 均为方法调用。而实例变量的访问,要么是在对象内部通过 @var_name 直接访问,要么是在外部通过 instance_variable_get, instance_exec 这样的代码探针来调用。

    所以你需要的可能是 obj.methods 来返回所有的非私有方法

  • 那这打印的就是“类实例变量”了.... 不知道楼主真正的原始问题到底是什么

  • 你想偏了,实例变量不会被继承,自然不存在“返回继承链上的实例变量”这样的方法

  • 宿主机 ip, 需要 db 容器映射端口

    看错了问题 😅 没用过 kamal, 不过不用虚拟网络的话,两台 docker 互通我一般是通过宿主机地址加映射端口实现

  • 比较奇怪的特性 at 2023年10月30日

    有意思的问题,这应该不是特性,纯粹是运行速度快导致时间戳一样了。用代码试了下

    rst = []
    1000.times do
      rst << (Time.now <=> Time.now)
    end
    
    to_f_rst = []
    1000.times do
      to_f_rst << (Time.now.to_f <=> Time.now.to_f)
    end
    
    p "normal rst is #{rst.tally}"
    p "to_f   rst is #{to_f_rst.tally}"
    # 输出
    # "normal rst is {-1=>219, 0=>781}"
    # "to_f   rst is {-1=>287, 0=>713}"
    

    无论加不加 to_f, 我的机器上都是相同时间戳占多数,跑了几次结果都差不多。

    提一句,最近在 nodejs 上也遇到了跟时间戳相关的问题,js 的时间戳只精确到 ms, 当在逻辑中循环创建多个对象,并通过 bulk insert 写入 db 时,这些数据的 createAt 时间都一样,最终在按照 createAt 排序时会出现某些意想不到的问题... 这种问题我在 rails 中从来没遇见过,就是因为 ruby 的时间精度管够😅

  • 同遇到过这个问题,“事务中使用 return 会导致 rollback”是 rails7 的特性 (surprise!)😅 . rail6 其实没有这个问题。可以参考这个讨论 https://github.com/rails/rails/issues/45017

  • 层数不多的话我在工程中通常会选择显式传给另一层,层数太多的可能需要个上下文管理器,类似于 Rei 说的。

    为什么 current 再下一次的请求也是能访问到,下次的请求不会重新新建一个线程,而是复用么?

    通常 web 服务器会通过线程池复用线程,你可以试试把服务器的线程数改成 1, 再在每个请求中打印线程的 object_id, 应该都一样

  • 都在 controller 层,为何不直接存实例变量?

  • 曾经也想试试 jsonapi, 但是团队里已经对 graphql 比较熟练了,对比下来 jsonapi 没有明显的优势,就没尝试用它来启新项目

  • 给回流技术部门的一封信 at 2023年09月07日

    说的到位😁 😄

    掰扯两句。

    往往最先发现事情不对劲的都是一线工作者

    确实,但是一线员工未必会主动告诉管理者。普通人在跟领导说话的时候总是有些顾及。俗话说“交浅不言深“, 如果领导不怎么普通员工混在一起,那就很难感受到员工的真实想法。

    几年前我们公司意外招进来一个"资深程序员", 入职的第一个星期,办公室几乎所有人都看出来这个人从能力到人品都是个水货,私下大家还经常拿这个人在项目里犯的各种低级错误开玩笑,但是就是没有一个人告诉领导。直到这个人在项目进度上出了大问题,才被领导注意到。这件事的连锁反应后来也影响到了我负责的部分项目。后来我复盘这些事,感觉其中很大的原因就是领导离员工距离太远了,一个星期跟其他人都未必能聊两句话,但凡一起多吃几次午饭,这事都能顺嘴兜出来

  • 才从 vscode 切回 rubymine, vscode 在 ruby 代码跳转,查看上还是达不到 rubymine 的效果

  • 类似的问题我在 windows 的 wsl2 中遇到过,当项目文件放在 windows 的文件系统上时,响应会特别慢,把项目文件放在 wsl2 里后,速度就正常了

  • rubymine 能实现接近你想要的效果。VScode 应该需要将库安装到项目目录下才能用 solargraph 实现这样的效果吧,具体没试过

  • 没咋看懂,具体啥问题?

  • 可以呀老蓝。1 到 3 年经验都能开到 15k 以上,还能远程,是比成都这边好多了。爽歪歪😄 😈

  • 同楼上。

    不过如果你非要防止更改,且页面是后端渲染的话,可以给请求链接加个签名,后端校验签名...😅

  • 升级跨度这么大...恐怕这个问题解决之后还有更多的坑。是自己的项目还能折腾一下,公司的项目那就容易进坑了。之前一个关键字参数的特性变动就搞得很多老 gem 没法用....

  • 新人学 Ruby at 2023年05月26日

    不兼容,最好使用 ruby 2 的版本