Subscribed unsubscribe Subscribe Subscribe

active_admin に acts_as_paranoid で論理削除したレコードを表示する

active_admin is 何

管理画面

acts_as_paranoid is 何

論理削除

active_admin と acts_as_paranoid

acts_as_paranoid を適用したモデルでは、Model.all とかでとれるレコードから論理削除したレコードが除かれます。active_admin の index ページは(たぶん)Model.all でレコードをとってきてるので、acts_as_paranoid を使ってると論理削除したレコードが表示されません。

論理削除したレコードも表示したい

ActiveAdmin.register Model do
  def scoped_collection
    Model.with_deleted
  end
end

ActiveRecord の connection_pool のおはなし

TL;DR

config/database.ymlpool = Rails 1プロセスあたりのコネクション数

非同期処理

  • Sidekiq はマルチスレッド(= Rails プロセスは1つ)のため、pool の値が concurrency の上限値になる
  • Delayed Job, Resque はマルチプロセス(= 各プロセスが Rails のプロセスをもっている)のため関係なし

Unicron

before_fork do |server, worker|
  ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  ActiveRecord::Base.establish_connection
end
  • Unicorn は worker ごとにコネクションをはってる
  • before_fork でコネクションをきる(master プロセスがコネクションをもたないようにするため)
  • after_fork(= 各 worker)でコネクションをはる
  • スレッドとか使っていなければ各 worker 1コネクションですむはず

idobata-yo

https://github.com/kirikiriyamama/idobata-yo

これはなに?

任意の Yo アカウントに Yo すると Idobata に Yo が飛ぶんだ Yo

Yo API を使うと Yo が飛んできたときに任意のコールバック URL を叩くことができるんだ Yo。 これを使って idobata-yo を叩くんだ Yo。 idobata-yo は Idobata の WebHook を叩くんだ Yo。

誰が特するの?

誰も特しない Yo

IAM で S3 の特定バケットへのアクセスのみ許可する

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::$bucket_name",
        "arn:aws:s3:::$bucket_name/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}

nginx の worker_processes を auto にしたときの挙動

worker_processes

ワーカーのプロセス数。ドキュメントを意訳するとこんな感じ。

worker_processes の最適値な、いろんな要素が複雑に絡み合っていて複雑なんや。CPU のコア数とか、負荷のかかり方とか、とにかく複雑なんや。困ったら CPU のコア数とかにしとけばええんちゃうか?あとな、auto にしとくとよしなに設定してやるやで。

よしなに…?

  • よしなにの中身を知りたかったのでググる
  • "よしなに設定する" としか書いてない

ソースをよんだ(怒)

https://github.com/nginx/nginx

worker_processes で grep

それっぽいのでてきた。

src/core/nginx.c
    if (ngx_strcmp(value[1].data, "auto") == 0) {
        ccf->worker_processes = ngx_ncpu;
        return NGX_CONF_OK;
    }

auto だったら ngx_ncpu に設定されるらしい。

ngx_ncpugrep

それっぽいのでてきた。

src/os/unix/ngx_posix_init.h
#if (NGX_HAVE_SC_NPROCESSORS_ONLN)
    if (ngx_ncpu == 0) {
        ngx_ncpu = sysconf(_SC_NPROCESSORS_ONLN);
    }
#endif

sysconf(_SC_NPROCESSORS_ONLN) で利用可能なプロセッサ数をとれるっぽい。$ man 3 sysconf 参照。
あと気になるのが NGX_HAVE_SC_NPROCESSORS_ONLN

NGX_HAVE_SC_NPROCESSORS_ONLNgrep

auto/unix
ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)"
ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN"
ngx_feature_run=no
ngx_feature_incs=
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
. auto/feature

は?(威圧)
突然のシェルスクリプト。とりあえず auto/feature を見てみる。

auto/feature
                cat << END >> $NGX_AUTO_CONFIG_H

#ifndef $ngx_feature_name
#define $ngx_feature_name  `$NGX_AUTOTEST`
#endif

END

だいぶ省略したけど、ビルドするときに動的にヘッダファイルを作ってるみたい。

まとめ

結局コア数だった。