Hegwin.Me

朱雀桥边野草花,乌衣巷口夕阳斜。

Rails 7升级过程中针对cookie一系列变化的应对策略

Rotate cookies when upgrading to Rails 7

最近在进行Rails项目从 6.1 到 7 的升级,这个过程并非一蹴,而是分了好几次部署才完成最终的设置。Rails 7在带来一些新功能的同时,也带来不少 breaking changes,使得这一次的版本升级比之前的都要麻烦一些。这其中比较折腾人的就是关于 cookie的一些变化,Rails修改了默认的cookie serilaizer,以及默认的加密方式,造成了新旧cookie的不兼容,...

运行特定版本的 bundler

Run specific version of bundler

Ruby小(没)技(鸟)巧(用)系列。 当你同时安装了两个版本的bundler,比如 2.0.1 和 1.17.2,默认情况下 bundle exec 等命令都是使用的最新版本的bundler;而你要维护的程序比较古老,那么你可能就会遇到这个神奇的问题: Bundler could not find compatible versions for gem "bundler" ...

Rails 应用的内存优化

Improve Memory for Your Rails App

我今天在郑州参加了为期两天的 Ruby Summit China 2018;Summit 在郑州“大玉米”举行。我没想到在郑州这样一个互联网公司密度不是那么高的城市,可以举办这样规模的互联网大会(Ruby Summit只是其中一个分会场)。更令人惊喜的是,Ruby语言之父松本行弘(Matz)也有来参加做开场演讲。于是乎,我专程从上海来到郑州参加这个Summit——也算是程序员界的追星行为了。...

谷歌开发者大会2017心得:PWA 渐进式网页应用

Takeaways from Google Developer Days 2017: PWA Progressive Web App

这是Google Developer Days 2017 Take Ways系列的第二篇。在今年的GDG上,渐进式网页应用(PWA,Progressive Web App)是一个反复被提起的技术,我至少参与两次主题是 PWA 的演讲。 PWA所要解决的主要问题是能让 Web App 有着接近 Native App 的效率。另外,在人们不太乐意下载新App的情况下,PWA 给开发者的应用...

Rails优化SQL可能用到的工具

Tools to Help to Improve SQL in Rails

你是否遇到过遇到 Rails app 在渲染页面很慢的情况? 你是否想找到造成它“慢”的原因?性能瓶颈究竟在哪里?是它执行 SQL 查询数据慢(可能是N+1,或者是没有合适的索引),还是其他的原因,比如view太大? 进行性能优化一直是一个典型的“难定位”问题;目前我个人是用到了以下几个工具去找出问题到底在哪里: 1. New Relic 老牌的性能检测工具,与Rails集成之后...

修改Repo地址后Capistrano部署问题

How to Deploy with Capistrano after Repo URL changed?

其实有点闹妖的成分, 我们用Capistrano部署项目,最近把项目仓库从BitBucket迁移到了Github上,本以为只要把 `config/deploy.rb` 里 `set :repo_url`改一下就好,但事实并非如此。 用Cap执行部署时,看到Log里还是从BitBucket的repo里拿的代码,所有迁移到GIhub之后的改动都没有包含进去。 在网上搜了下,需要自己s...

在Rails中实现HTTP Long Polling

Implement HTTP Long Polling in Rails with Action Controller Live

通过使用 ActionController::Live,我们可以实现实时的Push通信。官方文档在这里 http://edgeapi.rubyonrails.org/classes/ActionController/Live.html,但总觉得学习起来,这个文档太简略。这里面主要是利用了这几个技术:当HTTP/1.1 的Header指定为 Transfer-Encoding: chunked...

Rails权限验证工具Pundit

Rails Authorization with Pundit

在人们开始使用Rails 4之后,cancan 的复杂以及兼容性修复不及时而遭人诟病,大家将目光投向了新的工具 Pundit。 Pundit 是一个纯 Ruby 的gem,用于权限验证。 基本思路是Pundit对于需要鉴权的对象,根据用户的操作,会去这个对象的对应policy中寻找和执行鉴权的方法,继而实现验证。 也就是说,对于任意的Ruby Class,需要验证用户...

Nginx部署时Assets静态文件请求的配置

Handle Assets with Nginx Instead of Thin

将Rails项目部署到production环境时,我在 assets 方面遇到了不少问题。 现在你们看到的Hegwin.me这个博客,我是使用 Nginx 和 Thin 作为服务器部署的。因为部署的频率并不高,所以我基本上都是手动来部署的。在我部署的过程中,当我执行完 `RAILS_ENV=production bundle exec rake assets:precompile`,并...

Rails项目持久集成工具:RSpec+Guard+Spork

Rails CI: RSpec+Guard+Spork

RSpec,Ruby中的一个测试框架,可以用于给Ruby on Rails写测试,也可以用于纯Ruby项目。 Guard,“人”如其名,监视着项目中的所有文件,当项目中某个文件发生变化,便会根据配置去启动相应的测试脚本。 Spork,可以将其认为是一种懒加载服务,自动加载了Rails项目所有文件,当文件发生变化时才会重新加载有变化的那部分文件,这样就减少了测试启动时加载的时间,大...