読者です 読者をやめる 読者になる 読者になる

logrotate.d のdebugモードがおかしい

linux rails

Railsのログローテートは、Linuxのlogrotateで行う派なのですが、 久しぶりに設定してdebugモードで確認してみるとエラーが出て小一時間ほど嵌ってしまいました。
結果から言うと、logrotate のBugだそうです。
 
Bug #1320201 “behaviour in debug mode doesn't match real behavio...” : Bugs : logrotate package : Ubuntu
3.9.1 では直っているそうです。

設定内容

$cat /etc/logrotate.d/rails
/var/www/rails_app/log/production.log {
    daily
    rotate 31
    missingok
    notifempty
    compress
    delaycompress
    noolddir
    sharedscripts
    postrotate
        /usr/bin/passenger-config restart-app /var/www/rails_app
    endscript
}

出たエラー

$ logrotate -dv /etc/logrotate.d/rails

error: error opening /var/www/rails_app/log/production.log.31.gz: No such file or directory

missingok 設定しているのにエラーになる。

git-trend v1.1.0 release

ruby

コマンドラインTrending repositories on GitHub today を参照できる rochefort/git-trend: をbump upしました。
 
新機能追加では無いのですが、HTMLの構造が微妙に変更されていたのと
言語毎のページがurlのpathに含まれるようになっていたのに対応しました。
これまではqueryに追加される形式でした(現在もクエリでも動作しますが、勢いで新urlに対応しました)。

acts-as-taggable-onのtagをRansackの検索対象に含める

rails

違うアプローチを試して少しはまってしまいましたが、 とても簡単に association も考慮して検索することができました。 Ransack 賢いなぁ。

以下は、title と description と tag の like検索になります。

query = { title_or_description_or_tags_name_cont: "ケーキ"}
q = Article.published.ransack(query)
q.result(distinct: true)
SELECT DISTINCT "articles".* FROM "articles"
LEFT OUTER JOIN "taggings"
ON "taggings"."taggable_id" = "articles"."id"
  AND "taggings"."context" = ? AND "taggings"."taggable_type" = ?
LEFT OUTER JOIN "tags"
ON "tags"."id" = "taggings"."tag_id"
WHERE "articles"."status" = ?
AND (("articles"."title" LIKE '%ケーキ%' OR "articles"."description" LIKE '%ケーキ%')
OR "tags"."name" LIKE '%ケーキ%') ORDER BY "articles"."created_at" DESC

 
tagsテーブルは、model で acts_as_taggable した際に has_many through: で関連づけられています。

has_many :base_tags, through: :taggings, source: :tag, class_name: '::ActsAsTaggableOn::Tag'

 
注意事項としては、LEFT OUTTER JOIN での検索になるので distinct しておかないと結果に重複が出る場合があります。