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.yml
の pool
= 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
S3 で bucket ごと public にする
bucket policy に下記を記載($bucket_name は適に)
{ "Version": "2008-10-17", "Statement": [ { "Sid": "AllowPublicRead", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::$bucket_name/*" } ] }
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_ncpu
で grep
それっぽいのでてきた。
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_ONLN
で grep
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>