How to split rails routes.rb into smaller files - instance_eval

The most common (base on my google search) way to split `config/routes.rb` in rails is by defining your own `draw` DSL. This is just one ...

Wayne

Scaling the monolith

在拆成潮潮的 Micro Service 或是超級大 Refactor 甚至是討論要不要換語言換框架前,先從小的改變做起吧。文章列了一些滿基本但是都很實用的原則、方法、工具,下次沒票可以做或是上班閒閒時都可以試一下,還可以增進一下未來工作效率。 ~~除非你只是想要潮?(威...

Wayne

儲存 sensitive 資料的一些基本作法

### 大原則: 1. sensitive 資料加密儲存 2. Web server 只放加密用的金鑰,不放可以解密的金鑰 實際做起來就是:把需要解密的金鑰放到 worker 的 server,worker server 不接受來自外面的流量、且只能透過公司的 VP...

Wayne

在 Rails 裡擴充 gem 提供的 ActiveRecord model 的方法

需求:想要為 Gem 提供的 Model 增加一些新的 method 或是 association For example, doorkeeper 的 gem 有一個 `Doorkeeper::AccessToken` 的 model,我想要有個 `Doorkeeper:...

Wayne

Rails 直接取得欄位的值(before_type_cast)

How to get column value from ActiveRecord without being affect by overrided attributes? 有時候會想要直接取得 database 裡的值,以免被 model 裡覆蓋的 attribute...

Wayne

How to test with Salesforce Heroku Connect

## What is Heroku Connect? This is a tool provided by Salesforce and Heroku, it will automatically sync all your salesforce tables int...

Wayne

sidekiq-scheduler and sidekiq-cron

There are 2 popular cron task gem for sidekiq, I find [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) has more powerfu...

Wayne

在 middleware 裡塞 user 給 sidekiq 就不用每次傳

我個人是不喜歡啦,但可以參考一下有趣的作法 https://blog.bigbinary.com/2018/12/05/passing-current-user-by-default-in-sidekiq.html

Wayne

Dump production database to local with Rails

```rb # lib/tasks/db/pull.rake # # Usage # # dump the development db # rake db:dump # # dump the production db # RAILS_ENV=production r...

Wayne

ActiveSupport::Inflector#parameterize

好用的 helper ```rb "123-this-is-標題-haha".parameterize #=> "123-this-is-haha" ``` 很適合拿來做 friendly url 的簡單解決方案 ```rb class Post < Applica...

Wayne

Rails disable some unwanted generators

Rails 常常會自動產生一些不需要的檔案,可以在 generator 裡面設定,放在 `config/application.rb` 裡面就行 記錄一下個人常用的設定 ```ruby # factory_bot config.generators do...

Wayne

在 Rails 使用 custom font

參考 https://coderwall.com/p/v5c8kq/web-fonts-and-rails-asset-pipeline 把檔案放到 `app/assets/fonts` 裡面 然後在 `application.scss` 裡加上 ```scss @...

Wayne

Ansible + rails + letsencrypt

First, install nginx roles/nginx/tasks/main.yml ```yml - name: Install nginx apt: name: nginx state: latest - name: Disable ...

Wayne

Implement algolia autocomplete with rails

```js // app/javascripts/application.js const algoliasearch = require('algoliasearch/lite') const autocomplete = require('autocomplete....

Wayne

Integrate Uppy with Rails and ActiveStorage and use google drive direct upload

We're going to integrate Uppy with "upload from Google Drive" feature with rails backend and ActiveStorage, in this case we are going to ...

Wayne

Using marked.js with hightlight.js in rails to provide github flavored markdown to github style html

In this example, I'll use webpacker to import highlight js and marked js and css file, you can use cdn as well. `app/javascripts/appli...

Wayne

Import css from npm module in rails with webpacker

I use highlight.js In `app/javascripts/styles.js` ```js import 'highlight.js/styles/github.css'; ``` And then add to layout ```erb <...

Wayne

Rails schema 到底怎麼保持乾淨

在不能 access production database 的情況下: 1. 怎麼保持 local database schema 是乾淨的 2. 如果髒了,怎麼恢復成乾淨的而且不影響現在 local 有的資料(乾淨的資料恢復,不乾淨的就丟掉) ## Idea 1...

Wayne

reset password token leaking

reset password 的網址常常是 https://yourdomain/password/reset?token=xxxx 但這樣就會被第三方網站從 `HTTP Referer` 內找到並紀錄起來 reset password 的 token,例如 googl...

Wayne

rails model conditional validation 的神奇用法 extend

lol, 沒想過可以這樣 ```ruby user = User.find(id) user.extend(User::RegistrationContext) ``` ```ruby # app/models/user/registration_context.rb ...

Wayne

Suspender 用 1.46.0 可以使用 rails 5.1.6

ThoughtBot 的 rails bootstraper,現在最新版 default 使用了 rails 5.2 很煩,因為我不喜歡 5.2 的 credential 要使用 5.1.x 版本的話要用 v1.46.0 版本的 Suspender,但 1.46.0 是用...

Wayne

Rails where.not 的寫法會略過欄位是 Null 的值

`where.not` 的寫法會略過欄位是 Null 的值,所要對有可能是 Null 值的字串欄位使用 `where.not` 有兩個做法: 1. default 空字串 2. 使用 `or` 另外如果是 boolean 欄位但有可能是 null (雖然一開始就不應該這...

Wayne

bcrypt, devise, and rails secret_key_base

devise 用 secret_key_base 當作產生 token 的依據 devise 用 bcrypt hashify password 然後儲存 rails 的 has_secure_password 也是用 bcrypt 實現 bcrypt() is a h...

Wayne

Devise 每次都會同時下 ORDER BY 和 LIMIT 的 sql 去找 users

同事提出的建議: ``` SELECT "users".* FROM "users" WHERE "users"."id" = $? ORDER BY "users"."id" ASC LIMIT $? id 是 primary key, 理論上不會有重複的資料. ...

Wayne

How to Create Postgres Indexes Concurrently in ActiveRecord Migrations

之前的文章提到要避免 deployment downtime 其中一個方式是 create index concurrently http://everyday1percent.blogspot.com/2018/05/rails-deployment-downtime....

Wayne