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

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

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

まとめ

結局コア数だった。

rails 4 で turbolinks を無効にする

Gemfile
 # Use jquery as the JavaScript library
 gem 'jquery-rails'
 # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
-gem 'turbolinks'
+# gem 'turbolinks'
 # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
 gem 'jbuilder', '~> 2.0'
app/assets/javascripts/application.js
 //= require jquery
 //= require jquery_ujs
-//= require turbolinks
 //= require_tree .
app/views/layouts/application.html.erb
 <html>
 <head>
   <title></title>
-  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
-  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
+  <%= stylesheet_link_tag    'application', media: 'all' %>
+  <%= javascript_include_tag 'application' %>
   <%= csrf_meta_tags %>
 </head>