Ruby

ネストしたHashからOpenStructを作る

HashからOpenStructを作成する場合、 pry(main)> OpenStruct.new({hoge: 1}) => #<OpenStruct hoge=1> pry(main)> OpenStruct.new({hoge: 1}).hoge => 1 のようにすればよい。 しかしネストしたHashだと以下のようになる。 pry(main)> OpenStruct.new({hoge: {fuga: 2}}) => #<OpenStruct hoge={:fuga=>2}</openstruct></openstruct>…

rack-attack gemでユーザごとにアクセス数を数える

http://shepherdmaster.hateblo.jp/entry/2016/08/21/000115 でも紹介しましたが、 https://github.com/kickstarter/rack-attack という便利なgemがあります。 n秒間にn回アクセスされたらアクセスを弾くThrottles機能を使う場合、 IP単位でアクセス数を数え…

rack-attack gemで保存先にRedisを指定する

https://github.com/kickstarter/rack-attack という便利なgemがあります。 特定のアクセスのみを許可するSafelists機能や、特定のアクセスを弾くBlocklist機能や n秒間にn回アクセスされたらアクセスを弾くThrottles機能、特定のアクセスを記録するTracks機…

Railsで複数DBのmigration

大規模なRailsアプリケーションだったり、旧来のシステムをRailsに置き換えたりしてると、どうしても複数DBを扱いたくなってくる。 その場合は例えば、以下のようなlib/tasks/database_foo.rakeを作成します。 namespace :foo do desc 'Configure the variab…

mail gemで、Content-Type: multipart/mixedとしたいけどならないときの対処法

mail gem使って、multipartメールでかつファイルが添付されたメールを送信したら、 Content-Type: multipart/mixedではなくContent-Type: multipart/alternativeになってしまい、 Thunderbirdでは添付ファイルが認識されず、MacのメーラーではHTML本文が表示…

mail gemで、「Non US-ASCII detected and no charset defined. Defaulting to UTF-8, set your own if this is incorrect.」と出た場合

mail gemを使っていて Non US-ASCII detected and no charset defined. Defaulting to UTF-8, set your own if this is incorrect. の様な警告が出る場合は、 mail.text_part do body 'あああ' content_type 'text/plain; charset=UTF-8' end mail.html_part…

シェル上からSQLを実行して簡単に集計できるライブラリ「sssummary」を作った

シェル上からSQLを実行して簡単に集計できる「sssummary」というライブラリを作った。 rubygems -> https://rubygems.org/gems/sssummary github -> https://github.com/akira-kuriyama/sssummaryログファイルとかCSVとかTSVとか、フォーマットされたファイ…