[Rails] すべてのbooleanカラムの値を変更する方法

DEPRECATION WARNING: `.represent_boolean_as_integer=` is now always true, so setting this is deprecated and will be removed in Rails 6.1
# Due to config.active_record.sqlite3.represent_boolean_as_integer = true

Rails6にアップグレードしたらSQliteのデフォルトboolean値の取扱い方が変わったみたい。 なにやら全ての値を変更せねばならず、大変だと思ったので自動化するスクリプトを書いた。

Rails.application.eager_load!
models = ApplicationRecord.descendants.collect { |type| type.name }
models.each{|m|
  col_hash = Object.const_get(m).columns_hash
  col_hash.each{|k,v|
    if col_hash[k].type == :boolean
      Object.const_get(m).where("#{k} = 't'").update_all( {k.to_sym => 1})
      Object.const_get(m).where("#{k} = 'f'").update_all( {k.to_sym => 0})
    end
  }
}

Node app(redashbot)をsystemdで起動する方法

Redash botが使用できなくなったので、代替を探していたらredashbotを見つけて早速導入。 (Redashは買収後元気ありませんね。。)

導入後Rebootに耐えたいよね、ってことでsystemdに登録してみた。以下手順。

serviceファイル作成

 $ sudo vi /etc/systemd/system/redashbot.service

中身は、

[Unit]
Description=Redashbot

[Service]
PIDFile=/tmp/redashbot.pid
Restart=always
KillSignal=SIGQUIT
WorkingDirectory=/home/ubuntu/redashbot
EnvironmentFile=/home/ubuntu/redashbot/bot.env
ExecStart=npm start
User=ubuntu
Group=ubuntu

[Install]
WantedBy=multi-user.target

bot.envは、

SLACK_BOT_TOKEN=xxxx
REDASH_HOST=yyy
SLACK_BOT_TOKEN=

systemdにセットしてスタート

 $ sudo systemctl daemon-reload
 $ sudo systemctl start redashbot

Reboot後も起動するようにする

 $ sudo systemctl enable redashbot

AWS ELBのSecurity Groupの設定方法

ELB/ALBの下にサーバを配置するときにどのセキュリティグループにするかいつもわからなくなるのでメモ。 構成はシンプルでELB(https) -> Web(80)

ELBのSecurity Group

  • Inbound: HTTPS Custom 0.0.0.0/0
  • Outbound: WebのSecurity Group

WebのSecurity Group

  • Inbound: HTTP Custom 172.31.0.0/16 (VPCのサブネット)
  • Outbound: all, custom 0.0.0.0/0

Firebase storageのセキュリティ

FirebaseのAPIを使ってアップロードした場合、

https://firebasestorage.googleapis.com/v0/b/<project>.appspot.com/o/users%2F91b11d904a5f0eb398a334ssb5%2Fimages%2F60.jpg?alt=media&token=5908a2d0-7630-4a35-8be5-e3cc8adbd723


のようなtoken付きのlinkをgetDownloadLinkで取得できる。このトークンがあると、誰でもダンロードできてしまう。 ダウンロード対象のダウンロードオブジェクトがセキュリティに気を使わなくてよいなら、tokenごとDBに保存。そうでない場合は、ref(path)だけ保存しておいて、クライアント側で毎回getDownloadLinkするのが良さそうだ。