sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

rails

Herokuでunicornを使うときの注意点

Herokuのダッシュボードには、次の画像のように、稼働しているアプリのリソース使用状況をMetricsとして表示する機能がある。 最近某アプリで、このMemoryのところが常に上限を超えている状況が発生したのだけど、原因は意外に気づかないところだったので、…

ActiveRecordのincludesに条件を指定する

ActiveRecordのhas_manyなどで持っているassociationをincludesするクエリをかくときに、動的にパラメータを渡してincludesする範囲を絞り込みたいときは、whereを使うと良いのだけど、単純にwhereだけを使わずに、referencesも一緒に使う必要があるらしい。…

Railsで日付型をdatetime型に変えるときの注意点

Date.today.to_datetimeとかやると、タイムゾーン情報が消されてしまって意図した時間にならなかった。 1.9.3p327 :014 > Date.today.to_datetime => Tue, 19 Feb 2013 00:00:00 +0000 しかし、to_timeならタイムゾーン情報が失われない。 1.9.3p327 :013 > …

Rubyでhtmlタグが含まれたテキストをサニタイズする

rgrove/sanitize · GitHubを使うと簡単にできる。 require 'sanitize' html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg">' Sanitize.clean(html) # => 'foo'

Kaminariで同じ画面に2つ以上のページネーションを作る

Railsアプリで画面にページネーションを作るときは、Kaminariが便利で使っている。同じページに2箇所以上のページネーションを作るとき、ページ指定用のパラメータがかぶりそうだけど、どうするのだろう、と思って調べたので、メモ。結論をいうと、ページ指…

メモリ上でテキストファイルを作るときにStringIOが便利そう

メモ。herokuだと、ファイルを一時的に作成するのも微妙な場合(特にdynoを2つ以上で運用していて、ファイル作成と読み込みのタイミングが違うとき)があるので、StringIOクラスを使ってメモリ上にファイルを作成して、それを/tmp/とかには置かずに、S3に置…

railsでCookieを設定する

railsでCookieを設定するときはこんな感じ。 このメソッドを適当なところで呼べば良い def set_cookie cookies[:hoge] = { :value => 't', :expires => 1.days.from_now } end 設定されたCookieがあるかどうかを確認するときは、こんな感じ。 cookies[:hoge]…

rack_rewriteをつかってwwwなしのリクエストをwwwありのドメインにリダイレクトする

herokuのサービスでwww.hogehoge.comをサービスのドメインとして、使っているときに、hogehoge.comにアクセスしてもサービスを使えるようにしたい。 しかも、できれば、そのときブラウザに表示するURLはhogehoge.comではなく、(Google Analyticsとか諸々の…

Herokuで稼働しているRailsをバージョン3.2.10に上げるために行ったこと

rails 3.2.10でセキュリティパッチが当たっていたので、herokuで稼働中のサービスのrailsのバージョンを上げたときの作業メモ。 前提 Herokuでrailsアプリを稼働していた。railsのバージョンは3.2.8 rubyのバージョンは1.9.2であった 手順 rails 3.2.10で推…

Railsアプリに「SLIDESHOW WITH JMPRESS.JS」を使って、3D効果のあるスライドショーを作る

目次 「SLIDESHOW WITH JMPRESS.JS」とは railsアプリケーションへの設定方法 カスタマイズ 1.「SLIDESHOW WITH JMPRESS.JS」とは Slideshow with jmpress.js | Codropsで紹介されているjmpress.jsベースのスライドショー用jQuery Pluginです。IE8では3Dのア…

ActiveAdminにCanCanを使った権限機能を追加する(3)

目次 ActiveAdminにCanCanを使った権限機能を追加する(1) - sessanの日記 ActiveAdminにCanCanを使った権限機能を追加する(2) - sessanの日記 ActiveAdminにCanCanを使った権限機能を追加する(3) - sessanの日記 今回は、いよいよActiveAdmin側に権限…

ActiveAdminにCanCanを使った権限機能を追加する(2)

今日は、権限を定義するところ。あとでカスタマイズする前提で、まずはcancanの権限設定用クラスであるAbilityクラスを作ることにする。 目次 ActiveAdminにCanCanを使った権限機能を追加する(1) - sessanの日記 ActiveAdminにCanCanを使った権限機能を追…

ActiveAdminにCanCanを使った権限機能を追加する(1)

最初から順序だてて解説しているブログがないので、書いとく。今日は準備するところまで。 目次 ActiveAdminにCanCanを使った権限機能を追加する(1) - sessanの日記 ActiveAdminにCanCanを使った権限機能を追加する(2) - sessanの日記 ActiveAdminにCanC…

ActiveAdminのEdit画面のselectタグで表示するラベルを変更する

ActiveAdminの管理画面のうち、モデルのEdit画面で入力項目がselectタグのリストになっているとき、リストのラベルが #<Hoge:0x007ea2199999> のようなインスタンスを表す文字列になっていて、何を選択すれば分かりにくいときがある。この場合、ActiveAdmin 0.4.4で使えるようにな</hoge:0x007ea2199999>…

Railsのモデルの新規作成時のみにバリデーションを掛ける

Railsのモデルの機能を使ったバリデーションは便利だが、すでにリリースしたサービスにバリデーションを追加する場合、既にあちこちにそのモデルの更新処理があったりして、そこで全てバリデーションに引っかかるのは困る、という場合がある。そんなときは、…

Railsのパス指定ヘルパーで絶対URLを使う

普段、以下のようなパス指定の仕方をして、相対URLを使っていたが、 user_hoge_path Mailerでメールの中身を描画するときにリンクなどで、絶対URLを使いたい時は、xx_pathではなく、以下のようにxx_urlを使うと、:only_path => falseを指定することができる…

ActiveRecordでSQLを指定して実行する

IN句やEXISTS句はActiveRecordがサポートしていないので、最後の手段でSQLを直打ちするときは、以下のようにする User. find_by_sql([ 'SELECT users.* from users WHERE ' + 'NOT EXISTS ' + '( ' + 'SELECT hoges.* FROM hoges WHERE ' + 'hoge.attr = ? A…

ActiveRecordでDISTINCTを使う

今まで、以下のようにしていたが、 Hoge.select('DISTINCT *').where(:hoge => true) Railsの公式ガイドによると、uniqというメソッドを使うのが正式なやり方なので、 Hoge.where(:hoge => true).uniq これで、上のと同じselect文がかける。 ちなみに、なん…

select_tagの基本的な使い方

忘れるのでメモ。 適当なオブジェクトを表示用ラベルとvalueにマッピングしてあげれば楽。 そして、空白値を表示したいときは、:include_blank => trueにする select_tag :hoge_id, options_for_select(@hoges.map do |hoge| [hoge.name, hoge.id] end), :in…

rubyのaws-sdkを使って、heroku上のrailsアプリからS3にファイルを置く

前提 Rails3を使ったWebアプリをheroku上で稼働させている base64エンコーディングされて、POSTのパラメータとして渡ってきたmp3ファイルをAmazon S3に配置することを想定 事前にAWSのアカウントとcredentialsは取得済 手順 1. 初期化ファイルをconfig/initi…

ActiveSupportのtryが便利

Railsのビューなどで、nilチェックが面倒なときは、ActiveSupportのtryを使うのが便利。tryで渡したメソッドがあればそれを呼び出し、なければnilが返る。Object#tryなので、NIlClassでも呼べるのがミソ。 <%if user.parent && user.parent.first_name %> <%…

RailsでDate型日付の差分を求める

ActiveSupportが使える環境では、日付の計算がすごく楽。 日付の差分を計算するときは以下のようにする ruby-1.9.2-p290 :001 > today = Date.today => Thu, 02 Aug 2012 ruby-1.9.2-p290 :002 > tomorrow = Date.today + 1 => Fri, 03 Aug 2012 ruby-1.9.2-…

ActiveAdminの画面の検索条件のフィルターでbooleanも絞り込みに使えるようにする

ActiveAdminのデフォルトではbooleanを検索条件のFilterに表示してくれないが、以下のように書けば、filterをかけられる。:availableはboolean型の項目。 filter :available, :as => :check_boxes 参考:NAMAKESUGI | [Rails]管理画面プラグイン ActiveAdmin…

#を使ったアンカーリンクをrailsのurl_for、link_toで作成する

前に調べたことあったけど、また調べてしまったのでメモ。 <%= link_to 'リンク', {:controller => 'hoge', :action => 'hoge_action', :id => hoge.id, :anchor => 'anchor_tag'} これで、 http://hogehoge/~~~/hoge#anchor_tagといった感じのアドレスが作…

RubyでHttpclientを使って、jsonをpostする方法

仕事でAPI用のサーバを用意して、そのAPI用のサーバを別のrailsアプリから叩く、という必要が出てRubyで使えるhttpclientを探した。探していたのはJSONをPOSTのパラメータとして渡すことができて、さらにDigest認証に対応しているライブラリ。 Faraday httpc…

ActiveSupportのto_time、to_date、to_datetimeが便利

マッチング系のロジック(5分以内ならマッチング可能とか)で日付をまたいだときの処理が結構大変なんだけど、今日はRailsのActiveSupportのto_date、to_time、to_datetimeの存在を知ったのでメモ。すごく便利だと思う。 $ rails c ruby-1.9.2-p290 :003 > n…