• "If a server receives a request with a stale term number, it rejects the request." 过期的 term 是不是应当直接无视?

  • 如果 test case 不同的随机种子下能运行 15 次都没 bug, 那基本上就是没 bug 了,这种分布式的和时间差有关的代码不好 debug.

    1. 里面的问题,按你目前的设计,是不是不只是可能需要选举,甚至可能几分钟都没有 leader? 比如 candidates 在等票的时候收到了老 leader 的 AE RPC, 而 candidate 返回给老 leader 的 term 因为网络防火墙原因被老 leader 丢掉,这样老 leader 一直发,而 candidates 一直变回 follower, 每次都没选举成功。

    2. 应该可以,但是可能没有做到 DRY? 这个问题不大的,怎么实现都行。

    3. 不用检查,因为先执行 all server 的 term 检查,如果 leader 自己 term 比 reply 的 term 小了,leader 直接就 convert 到 follower 了,就不继续进行 leader 的工作了。如果没 convert 到 follower 就还是 leader.

  • 你要严格执行它论文的每一个检查,一条都不能漏,不能换,不然,相信我,肯定出 bug 😄

  • 1 的问题,new leader 是指老 leader 离线了之后,出了若干个 candidates, 这 1 波/几波 election 之后定下来的 leader, 成了 leader 才能发 Append Entries RPC, candidates 收到的 AE RPC 可能是离线了那个老 leader 又上线了发的 (才睡醒,不知道它自己已经下台了,还在发 AE RPC), 也可能是新选出来的 leader 发的,那么这时候老 leader 的 term 肯定小于 candidate 的,这时候这个 candidate 就不能 convert 到 follower, 时间到了还要发起 election, 如果你把它直接不管 term 是大还是小都 convert 成 follower 了,那可能有这么一段时间所有人都成不了 leader(假设老 leader 的网卡坏了,只能发不能收), 导致这段时间将无 leader 可用。

    2 的问题,Heartbeat 实际上就是空 entries 的 AppendEntriesRPC, 如果近段时间发过带 entries 的 RPC 就不用发 HB 了,否则就要发 HB, 以防 follower 觉得现在没有 leader. 所以你的问题的答案是,heartbeat 不带 entries, 但如果发现有 follower 缺 entries 了,那么下次就给这个 follower 单独发带 entries 的 (AE RPC), 给其他 followers 发不带 entries 的 (AE RPC, 也叫 heartbeat).

    3 的问题,要检查 follower 发给 leader 的所有信息的 term, 当然也包含 AE RPC 的 reply 的 term. 因为 Leader 首先属于 All servers, 要先执行 all servers 的规定,而后才执行 leader 的规定。

    上次看这篇论文还是在 19 年,可能记不太清了

  • 是大佬,我当时没有搜到您做的 Gem

    我做了 Steam 的和 Nintendo 的,感觉就是 Steam 的各个区很统一,各种 API 也很统一,但 Nintendo 就分了好多好多区,每个区都不一样,还总变,有些是从 HTML 里面找的某个 div id 拿到 CODE 去查询价格,一旦网页改了,查 CODE 的代码就得重写。像港区还有韩国区都不知道怎么弄,美区也是从 Algolia 的数据搜索里面一点点导出来

  • https://store.nintendo.com.hk/games/all-released-games?product_list_order=release_date_asc

    港服只能找到它官网卖激活码的那种,然后挨个爬,解析 HTML, 找到 CODE.

    港服那些其他的在 NS 上可以直接购买的小游戏没有找到好办法,你看我的港服 Store 也是只有 500 多个游戏

  • @crazyjacky 是作者 我帮你 at 他啦

  • 正经的信息网站,做的太花哨反而会让大伙觉得是假的,我感觉你做的就挺好的😄 (有一个小小的建议导航栏按钮.nav-item .active 有 border radius, 但是按钮 hover 的时候非.active 没有圆角,感觉可以加一下)

  • Hey 谢谢!受了你的 Immigration 站很大启发😁

  • 请教一下,我知道 Ransack 本身是利用 SQL 的 ILIKE 来搜索的,这种搜索只能从头连续匹配吧?比如说Ransack组合条件搜索实现这个标题,我用ransack (空格) 搜索, 是搜不出来的吧?

  • render :new 改成:

    else
      render :new, status: :unprocessable_entity
    end
    

    参考:https://guides.rubyonrails.org/getting_started.html

    按我的理解:turbo 启用了之后要发一个 http 状态码回来,否则按 turbo stream 处理。

    另:

    def destroy
      redirect_to root_url, status: :see_other
    end
    
  • 哈哈是啊!

  • 是 API, rate limit 5 分钟 200 次请求😁

  • 按 Reddit 创始人的说法:"just use the d*mn library". Devise 在 Rails 6 的时候不得不承认是很好用的,一两天就能搞懂基本用法,比如密码登录发邮件之类的。Rails7 加了 Hotwire 之后,devise 的作者一直没处理这些 Turbo 引入的不匹配情形,虽然已经有很多人比如 Go rails 的 Chris 和其他人 patch 了一下之后能用了,但是还是不够 out of box. 我个人目前在用 Sorcery 做简单的密码认证登录,我之前还录过一个小视频介绍, 你可以试试 sorcery 满不满足你的需求。高安全要求也许没那么重要,真的做到那种程度的时候你应该会有一个 Team 专门做认证系统了,在那之前我个人觉得“build the features users really want, just use the d*mn library"比较经济。

  • 你说的二级目录是二级域名吗?subdomain? 比如www.example.comapi.example.com?

    还是说 routes.rb 里面配置的路由?namespace :api do ... end?

    如果你说的是 subdomain 的话,只要在 DNS 解析指向 A 记录 IP, 然后dokku domains:set sample-app api.example.com就好了

    如果你说的是 routes.rb 里配置的路由,这个就和 dokku 没啥关系了,在 Rails 里搞就好了。

    或者你是写了两个 Rails App? 这个我就没想过了。

  • 大部分情况下是可以的,但是有的时候自己写不一定那么面面俱到。举个例子比如说,如果攻击者猜的 email 系统内没有,那么后端也不会运行 password 的加密算法,所以返回结果是很快的,阻止了登录。但是这种快速的响应会让攻击者知道这个 email 系统内是没有的,那么它就可以很快的去尝试下一个 email. 而 Devise 或者 Sorcery 都会处理这个情况,即使 email 是不存在的,它们还是会打一个时间差,不会马上返回结果,这样攻击者就无法猜出 email 是有还是没有😁 当然了如果是内部系统啥的,这些就不必考虑,自己 roll 一个 has_secure_password 的认证系统就可以了!

  • 研究了两天,感觉 Dockerfile 的写法,大家都不太一样,不知道哪种是最佳实践,坑比较少。早上找了一个 3 小时的教程直接学一下 Docker. 您的意思是,还是用 Dokku 的 Dockerfile 方式部署,不是纯用 Docker 部署,还是完全抛弃 Dokku 啦?

  • 这个头一次听说,看起来也不错呀!

  • 我没有研究过 Docker 的用法,看了一下还得花点时间才能看懂。请问您现在不用“BUILDPACK_VENDOR_URL”环境变量指向国内文件存储镜像这种加速方式了吗?

  • 我以前也投过一次,一开始说是没有通过笔试所以被拒绝了。而我都没有收到过笔试题。后面又沟通了一下,说是因为想招经验比较丰富的。😅

  • 你俩说的不是一本,他说那本是以前出的。话说你这本感觉咋样?

  • 真是不容易呀,我还以为是容器的问题,要是一开始知道 AS 没问题的话就不会怀疑 storage 了。破案了就好😁

  • 这个跟 Action Text 没关系,取决于你的 storage, 你用的是 Disk, 在本地就是一直存在的,但是 Docker 容器重新部署时候 Disk 也是新的,以前存的就没了,和 Heroku 是一样的。你换成 AWS s3 这些服务就好了。https://edgeguides.rubyonrails.org/active_storage_overview.html

  • 惭愧,只会点很初级的英语,以前看美音的电视剧比较多,也没有特意去学,读得多听得多就潜移默化的学会了点儿。😅 目前没有在国外团队工作。

  • 字体是小,下次我会换一个桌面分辨率。但不应该尺寸小,1080P 也不会模糊。是不是您那边高清版本没有加载完毕?请问您方便截个图我看一下吗?

  • 很棒!捉个虫:“desc "Rum yarn install"” -> desc "Run yarn install"

  • Rails 7.0 正式版发布啦! at December 21, 2021

    您不用客气!! 我刚好看到别人问了这个问题,然后看到了另一个人的回答才学会的,现学现卖😄

    bin/dev是有了bundling方案之后才开始用的, 以前我也是用 rails s, 你可以关注下 DHH 的推特,他有时候发布新的 gem 的时候会出一个演示视频,我记得我是从他的视频里学的,也就是最近几个月发的。

    stimulus 来处理“are you sure?"也是一个方案,我以前也是那么写的,后来才知道可以用 Turbo, 惭愧惭愧!

    button_to , disable_with: "loading..."这个,目前我没有看到比较好的像 ujs 一样方便的方案,但是有一个用 CSS 来处理的方法:https://github.com/hotwired/turbo/pull/386. 估计以后可能慢慢完善了也能有像以前那么方便的方法吧!

  • Rails 7.0 正式版发布啦! at December 19, 2021

    Hey! 我试了一下,你的代码是没问题的,可以弹出are you sure?

    你试一下:删除 Gemfile.lock, 先 gem uninstall turbo-rails. 选 all versions, 把本地的 turbo-rails 都删了,然后重新 bundle install. 另外我把 debug gem 也删了 (因为我这没有 debug gem).

    这么做的原因是,我发现你的 turbo-rails gem 里面的版本是 turbo-rails-7.1.1, 但是谷歌了一下,这个版本被 yank 了 (https://discuss.hotwired.dev/t/fyi-turbo-rails-gem-version-7-1-1-was-yanked/3452). 现在的版本是 turbo-rails 1.0.0.

    然后你再bin/dev试一下,看看有没有弹出are you sure😀

    不行的话再回复看看还有啥问题,应该是可以的。

  • 如果用 cssbundling-rails 和 jsbundling-rails 这两个 gem 的话,启动 rails 就不要用 rails s了,不知道你有没有试一下用bin/dev? 应该是不需要手动 yarn 的。

    bin/dev

  • Rails 7.0 正式版发布啦! at December 19, 2021

    你用的是 button_to 吗?注意到 data 前面还有个 form 了没?如果方便可以发一下你的代码或者 repo 我帮你看看😀

    示例