CurryBu 開発日誌

今日食べたカレーを共有する CurryBu の開発ブログです。

CurryBu 開発月報 2014 年 2 月号

こんにちは。金曜日ですね。 金曜日は平和に過ごしたいものです。

1 月から開発月報というものを始めてみています。

CurryBu 開発月報 2014 年 1 月号
http://blog.currybu.com/post/75849351524/dev-report-2014-01

2 月も開発しましたよー!それでは行ってみましょう。

カレーを自動で Twitter にポストできるようになりました

カレーを投稿する時に Twitter にポストできるようになりました。
紹介記事を書いていますので良かったら読んでみてください。

カレーを自動で Twitter にポストできるようになりました
http://blog.currybu.com/post/78086540087/curry-post-to-twitter

Facebook 連携については... Issue はあるのですが、対応しようか迷っているところです。

Sidekiq を導入

Twitter に投稿する対応を行う際に、Twitter との通信をバックグラウンドで処理する必要が出てきたため、 Sidekiq を導入しました。 ドキュメントやサンプルコードが充実していますので、すんなり組み込めました。

ついでに Devise Async を導入して、 Devise を使用したメール送信(パスワードの再発行やメールアドレスの確認)をバックグラウンドで行うようにしました。

initializer はこのような感じで書いています。ドライバに hiredis を使ったり、namespace を指定しています。

# config/initializers/sidekiq.rb
config = Setting.redis
namespace = [Rails.application.class.parent_name.downcase, Rails.env, 'sidekiq'].join ':'

redis_options = {
  url: "redis://#{config.host}:#{config.port}/0",
  driver: :hiredis,
  namespace: namespace
}

Sidekiq.configure_server do |config|
  config.redis = redis_options
end

Sidekiq.configure_client do |config|
  config.redis = redis_options
end

バックグラウンド処理といえば、Sidekiq の他に Delayed::Job や Resque などが似たようなツールとして挙げられますが、なぜ Sidekiq を使ったか? 正直なことを言うと「Sidekiq だけ使ったことが無かったので使ってみたかった」ということになるのですが、理由を考えてみました。まあどのプロダクトでも良いと思います。

  • Sidekiq はスレッドで動作するため、ジョブごとにプロセスをフォークする Delayed::Job や Resque に比べると、メモリの使用量が少ない
    • Resque を使わない理由が無く、敢えて挙げるのであればこの点か...
  • Delayed::Job はキュー情報の格納に Active Record または Mongoid を使用するが、キュー情報を PostgreSQL に格納するのは個人的に違和感がある
    • Redis を使っているので、そちらにキュー情報を格納したい

ただ Sidekiq に不満が無いというわけでもなく、付属している Web インターフェイスでは、ジョブがリトライするようになっていないと失敗したキューのバックトレースが表示できない、などがあります。(本当はできるのかも知れません。どなたか教えてくださいm( )m)

Sidekiq は投入したばかりなので、障害が起きることもあるかもしれませんが、暖かく見守ってやってください。

ワーカーの監視には monit を使用しています。

「気になるカレー」にコメントも表示

「気になるカレー」には、いいね!のみを表示していましたが、コメントした場合も表示するようにしました。

viewport の拡大を無効化

スマートフォン版のページでは、ピンチ操作を使用した拡大・縮小が行えるようになっていましたが、 投稿ページなどでフォームに文字を入力しようとした時に画面が拡大され、元の表示に戻すには画面を縮小する必要がありました。

そこで、スマートフォン版では、投稿画像やユーザー画像について十分なサイズの画像が表示されているとのことで、拡大・縮小を行えないようにしました。

Rails 4.0.3

Rails 4.0.3 がリリースされ、アップデートしました。 セキュリティに関する修正が入ったアップデートであり、Rails 3.2.17 も同時にリリースされていますので、ぜひアップデートしましょう。

Riding Rails: Rails 3.2.17, 4.0.3 and 4.1.0.beta2 have been released! http://weblog.rubyonrails.org/2014/2/18/Rails_3_2_17_4_0_3_and_4_1_0_beta2_have_been_released/

Rails 4.1.0 の Release candidate 1 がリリースされましたね。 Beta 1 は Basecamp の本番環境で実際に動いているということで、安定してきているようです。

Rails 4.1 については下記の記事で新しい機能が紹介されていますので良かったらどうぞ。
個人的には Action Pack Variants が楽しみです。

What's new in Rails 4.1 - Coherence Blog
http://coherence.io/blog/2013/12/17/whats-new-in-rails-4-1.html

Ruby 2.1.1

Ruby 2.1.1 がリリースされ、アップデートしました。

Ruby 2.1.1 リリース
https://www.ruby-lang.org/ja/news/2014/02/24/ruby-2-1-1-is-released/

早速アップデートして様子を見ていますが、今のところ問題は出ていません。

しかし、一部でデグレードが発生し、Rails プロジェクトにも影響が出る可能性があるようです。 CurryBu では問題になるような処理をしていないため影響はありませんでした。

Ruby 2.1.1 で Hash#rejectデグレ - diary.sorah
http://diary.sorah.jp/2014/02/28/ruby211-hash-reject

[4.0.3/4-0-stable] ActiveSupport::HashWithIndifferentAccess regression with Ruby 2.1.1
https://github.com/rails/rails/issues/14188

偶然にも、 Ruby 2.1.1 をアップデートを行った時の CurryBu のバージョンが 2.1.1 でした。

今回は以上です。
まだまだ寒い日が続くようですね。それでは良い週末を :)