アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

Rails

act-fluent-logger-rails の Rails5 対応をリリース

こんにちは、tahara です。 act-fluent-logger-rails の Rails5 対応をリリースしました。 https://rubygems.org/gems/act-fluent-logger-rails/versions/0.3.0

Paperclip を使っている Rails アプリのテスト高速化

こんにちは、tahara です。 テストでも Paperclip を使っているモデルを FactoryGirl.create(:facility) とかすると、 ImageMagick の convert コマンドなどが走ってしまいます。 これがなかなか重くてテストを遅くしちゃっています。 そこで Paperclip のサ…

delivery_method を smtp にしたら 2.5 倍速くなった

こんにちは、tahara です。 Rails で config.action_mailer.delivery_method を :sendmail から :smtp にかえたら、44 分かかっていたメール送信バッチが 17 分で完了するようになりました。 ( ^-^)/:★*☆オメデト♪ なのでみなさん :smpt にしましょう! とい…

before_destory の prepend 指定について

ユーザーがブログを書けるアプリケーションとかで、ユーザーが退会したら、関連するブログを削除する指定をすることは良くあると思います。 以下のような設定です。 class User < ActiveRecord::Base has_many :blogs, dependent: :destroy end class Blog <…

Delayed::Job で絶対にやっておいた方がいいたった1つの設定

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の25日目の記事です。 これです。 Delayed::Worker.max_attempts = 0 Delayed::Job は実行に失敗した場合、デフォルトで25回リトライします。 気のきいた機能なのですが、メール一斉送信を D…

Common Lisp コードの方が多い gem

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の8日目の記事です。 Common Lisp コードの方が多い gem をリリースしました。 前回はたった2行でしたが、今回は200行以上あります。 ちなみに Ruby のコードは40行くらいです。 lisp-rails-…

guard-notifier-stumpwm

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の4日目の記事です。 ふだんいこーよを開発しているとき bundle exec guard ってやってます。 むかしは script/autospec でしたよね。 その当時は autotest-stumpwm でした。 このたび Gurad…

Unicorn と Nginx と Rails の関係

皆さん。初めまして。最近アクトインディに入社した namikata です。 エンジニア職未経験 30歳を超えている といったプロフィールを持っていますが、チャレンジするのに年齢は関係ありませんの精神で、これから頑張ってエンジニアライフを送っていきたいと思…

RSpec での悲観ロックのテスト

こんにちは、tahara です。 コードに account とか withdraw とか出てきたら悲観ロック(select for update)が必要ですね。 そのテストをするには次のものが必要になるかと思います。 コミットが機能する 複数スレッドがそれぞれ別々のコネクションでトラン…

requests spec を書こう

こんにちは、tahara です。 ちかごろ Rails のテストは requests spec がいいな、と思ってます。 メリットは リクエストの view → controller → model → レスポンスの view と、ひととおりでテストできる。 実運用にそくしたエンドツーエンドテストがあると…

拡張子なし、application/octet-stream のアップロード

こんにちは、tahara です。 Android からのファイルアップロードはエントロピーの神々に支配されているのでしょうか? 拡張子なし、Content-Type: application/octet-stream で jpeg ファイルが ブラウザから POST されたりします。 そんな POST に対応する…

バウンスメール処理

こんにちは、tahara です。 Rails システムでのバウンスメール処理ってどうするのがいいんでしょう? ベステプラクティスではないかもしれませんが、弊社でのバウンスメール処理方法を書いてみたいと思います。 まずメーラークラスで return_path にバウンス…

Rails で LaTeX を使って帳票出力

こんにちは、tahara です。 システム開発で、もう15年くらい前からやってみたいことがありました。 Web アプリでの帳票出力に LaTeX を使うことです。 社内システムながらようやくその機会に恵まれました。 rails-latex といういい gem があり、めんどうなと…

Active Record で null でない、かつ空文字でない

こんなふうに書けるんですね。 [1] pry(main)> Experience.where.not(content: [nil, '']).to_sql => "SELECT `experiences`.* FROM `experiences` WHERE (NOT ((`experiences`.`content` = '' OR `experiences`.`content` IS NULL)))"

Rails で is null と is not null

こんにちは、tahara です。 Rails で is null と is not null ってどうやって書くの? is null Foo.where(bar: nil) is not null Foo.where.not(bar: nil) http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods/WhereChain.html#method-i-not ちゃ…

assets:precompile が遅い

こんにちは、tahara です。 ようやく いこーよ も エンパ においつき Rails4 になりました! おいつかれたエンパ担当者は、「エンパはRails6くらいにしたい」などのたまっていましたが、 その時はエイリアンテクノロジーでつきはなしたいと思っています。 さ…

Rails ログを MongoDB と S3 につっこむ

こんにちは、tahara です。 そろそろデータマイニングなんか初めてみたいな、と思っている今日このごろです。 その前段階として、Fluentd を使って Rails のログを MongoDB と S3 に格納するようにしてみました。 で、そのために act-fluent-logger-rails を…

Rails アプリの JavaScript エラーの通知

こんにちは、tahara です。 Rails のエラー通知に Exception Notifier を使われてたりすると思いますが、 JavaScript のエラー通知はみなさんどうされているのでしょうか? ちょっと探してみたのですが、これだ! というもの見つからず、 PipelineDeals Dev Bl…

Asset Pipeline と Amazon CloudFront を導入

こんにちは、tahara です。 いまだに Asset Pipeline を使っていなかったいこーよですが、Amazon CloudFront とともに、ようやく導入しました。 温泉街の旅館のごとくページを増やしていたため、複数のレイアウトファイルが乱立しており、かなり大変な目にあ…

Rails のログを寡黙に

こんにちは、tahara です。 Rails のプロダクションログですが Started GET "/" for 127.0.0.1 at 2011-12-11 13:32:11 +0900 Processing by TopController#index as HTML Rendered shared/_login_box.html.erb (1.2ms) Rendered top/_header.html.erb (2.3m…

全件検索から全文検索へ (Rails で MySQL の全文検索)

こんにちは、tahara です。 ようやくいこーよを like '%foo%' の(SQL 力づく)全件検索から、MySQL の全文検索に変更しました。 最初は mroonga を使おうかと思ったのですが、結局は MeCab を使って MySQL の全文検索をそのまま使うことにしました。 MySQL の…

Rails での MySQL マスタースレーブ構成

いこーよ の GW の負荷対策として MySQL のレプリケーションを使いマスタースレーブ構成にしてみました。 一番悩んだのがマスタースレーブ構成のためにどのライブリを使うか。 次のような理由から seamless_database_pool をフォークして使うことにしました…

Rails 3.2.2 へのアップクレード (ssl_allowed が allowed されない件)

こんにちは tahara です。 先日 いこーよ を Rails 3.1.0 から Rails 3.2.2 にアップグレードしました。 今日はその模様を報告したいと思います。 まず Gemfile で Rails のバージョン指定を 3.2.2 にし bundle update しました。 gem 'rails', '3.2.2' Asse…

デプロイ時の Unicorn リスタートが失敗する件

こんにちは tahara です。 デプロイ時の Unicorn リスタートがときどき失敗して悩んでいました。 幸い本番環境では発生せず、ステージング環境と開発環境で発生していました。 リスタートは unicorn-4.1.1/examples/init.sh の upgrade を使っています。 upg…

Rails3 への移行

こんにちは、tahara です。 突然ですが、弊社では現在エンジニアを募集しています。 仕事内容は情シス業務と自社サービの開発です。 開発は主に Ralis で PHP もときどきあります。 たまぁに Common Lisp もあます(増やしていきたいです)。 詳細はこちらをご…

Lisp on Rails 第9回 〜 ビュー

こんにちは!! tahara です。 Objective-C づけになり、すっかりこぶさたしておりましたが Lisp on Rails 第9回です! 今回はビューです。 Common Lisp で ERB 相当を実装します。 Common Lisp で実装するからにはリードテーブルを使い、 HTML ファイルを関数…

Lisp on Rails 第8回 〜 before_*

こんにちは!! tahara です。 Lisp on Rails 第8回です! 今回は ActiveRecord::Base の save, create, update, destroy 等々のメソッドには beforo_* や after_* というフックメソッドを定義することができます。 ActiveRecord::Callbacks でそのあたりの実装…

Lisp on Rails 第7回 〜 ActiveRecord::Base の find メソッド

遅くなりました!! tahara です。 Lisp on Rails 第7回です! 今回は ActiveRecord::Base の find メソッドの機能を多少実装してみたいと思います。 ActiveRecord::Base の find メソッドは次の4つの使い方があります。 id で検索。 引数は (id, *args), (id1,…

Lisp on Rails 第6回 〜 ここらでリファクタリング

こんにちは!! tahara です。 Lisp on Rails 第6回です! has-one を has-many のコピペで書いてしまったので、 ここらでリファクタリングしたいと思います。 has-one のスロット定義 (defclass ar-has-one-slot-mixin () ((has-one :initarg :has-one :initfo…

Lisp on Rails 第5回 〜 has-one

こんにちは!! tahara です。 Lisp on Rails 第5回です! 今回は ActiveRecord の has_one アソシエーションもどきを実装したいと思います。 前回の has_many に瓜二つです。 ar-has-one-direct-slot-definition と ar-has-one-effective-slot-definition を定…