自作家計簿にNew Relicを導入した.
New RelicはRailsのPerformance Managemerで,PhotoShareでも有名な増井氏のblogで知った.
# masuidrive on railsはRails以外にIKEA HACK的な記事などもあって,読み物としても非常に面白い.
ローカルで開発しているときは気にならなくても,海外VPSにデプロイしてから遅さを感じることが多々あって,それがネットワークに起因するものなのかリソース(と言うかコードの効率)に起因するものなのかを切り分けたかったから.
と言うことで,増井氏が記事にされたdevelopment環境でなく,production環境の測定をLite版で.
導入手法は動画で丁寧に解説されているので,簡単.
設定ファイル(= newrelic.yml)もほとんど弄らずに使用.
続きを読む…
切りのいい数字,ってなんだろう.
そう言えば主観に依った数字だよな.
と言うことで,アンケートをとってみた.
「19,800を切り良くしたらいくら?」「…20,000?」
「1,980は?」「2,000」
「1,940だったら?」「2,000かな…1,900でも良いかな…」
「198,400だと?」「200,000」
(以下略)
どうやら,上から3桁目を四捨五入した数字は切りのいい数字らしい.
Rubyで書くとこんな感じでしょうか?(自然数限定)
def nice_round target
digit = 10 ** (2 - target.to_s.length)
return (target * digit - 0.5).ceil.quo(digit)
end
# for Test
20.times do
target = rand(100000)
printf("%d\t%d\n", target, nice_round(target))
end
結果はこんな感じ.
>ruby nice_round.rb
84753 85000
78860 79000
5446 5400
14912 15000
43271 43000
22326 22000
86664 87000
49225 49000
70498 70000
67840 68000
34791 35000
24946 25000
3759 3800
1876 1900
60383 60000
95901 96000
44147 44000
29798 30000
87766 88000
88708 89000
>Exit code: 0
それにしてもRailsだけやってるとRubyの構文は全然覚えない.
もっとSmartに書けると思うんだよな…
自分用家計簿サイトをRails 2.3.2で構築しました.
今,友人や同期にClosed Beta Testしてもらっています.
ところで,Railsで初期データをどう扱うべきかという議論.
家計簿で言えば,費用項目名(食費,交通費,交際費…etc.)なんかはユーザが使う前に予め登録されてると便利.
いろんな方法が考えられるんだけど,最もRailsっぽいやり方はなんだろう?と.
# Rails開発のコツは,「できるかぎりRailsっぽく作ろうとすること」だと気づいた.
すなわちDRYに,CoCに,楽しようという気持ちを忘れないことだ.
これを守っている(= Railsに乗っている)間は本当に気持ちよく開発できる.
最初,以下の記事を読んでmigrationファイルの中にHoge.create :foo => ‘bar’とか書いていた.
テーブル定義以外にも、普通に ActiveRecord を使うときのように
User.create :name => ‘admin’, :password => ‘admin’
と書いて、テーブル内にデータを挿入することもできます。
via: pylori*style wiki – MigrationによるDB管理
ところが,production環境に移行したら,「Hogeという定数が無いよ」的なエラーでmigrateできなくなった.
# なんでdevelopment環境では怒られないんだろう?
いろいろ漁ってみたら,以下の記事を発見し,あまりよろしくない方法だったと気づく.
新しいモデルをUserモデルのbefore_createとかで使おうとしたら、一瞬でrake db:migrateが通らなくなってしまう。。。
今回の場合だと、UserモデルのvalidateでKeywordFilterというモデルを呼び出してフィルタ処理を追加したのだが、KeywordFilterテーブルが生成されるより前に初期Userデータを生成しようとして、rake db:migrateでkeyword_filtersテーブルが無いよ!!っておこられた訳で。。。まぁそら無いわな。
via: migrationで初期データを生成するのは辞めた方がよい。 – RAILS PRESS
結局,アカウントに紐付いた初期データはアカウントのController#create中で登録することにした.
アプリケーション全体で使うような初期データはデータを登録するだけのmigrationファイルを作った.
# ちなみに,上記の問題に限るならば,development環境ではmigrationできることを利用して,
database.ymlでproduction環境のDBも開発用と共用してしまうという方法もあるらしい.
他に,fixtureを使う手もある.
デプロイ時にスクリプトでSQL文を発行しまくるという知人もいた.
boot.rbとかinitializerあたりに書くこともできそうだ.
んー.rakeに書くのが主流っぽいけど,どれもこれも一長一短に見える.
誰か,「初期データはこの方法で管理汁!」ってアドバイスがあったら教えてください.
Redmine 0.8.3でも以下のハックは有効.
新しいチケットを作成する際、担当者はデフォルトでは設定されていません。ソースコードに一行追加の記述をすると、自分自身(チケットを作成している人)が担当者として選択された状態で「新しいチケット」の画面が表示されるようになります。
自分一人のタスク管理用にRedmineを使用している場合に特に便利です。
変更手順
1. app/controllers/issues_controller.rbをエディタで開く。
2. newメソッド(文字列”def new”)を探す。
3. newメソッド内で@issue.author = User.currentという記述の行を探す。
4. 上記の行の直後に以下の記述を追加。
@issue.assined_to = User.current
参考
Redmine Users (japanese) Google Group (Maki=Tetsu様の記事)
via: Redmine.JP | 新規チケット作成時、デフォルトの担当者をチケット作成者にする
地味に便利.
市況の煽りもあって(?),個人的に家計簿サービスを作っていて,
まぁ,いわゆるCRUDサービスだし,Railsで良いかと思って,
かと言って,ただRailsしてもつまらんし,現在最新の2.3.2で行こうと.
以前,会社で資産管理システム作って以来だから,全然わからん.
で.基本的な入出金入力とか一覧はできて,
そろそろ自分でもソースが把握しきれなくなりそうだったので,
テストケースを導入.
ところが,Restful Authenticationで困ってしまった.
# GET /cash_flows/1
# GET /cash_flows/1.xml
def show
@cash_flow = CashFlow.find_by_id_and_user_id(params[:id], current_user.id)
unless @cash_flow
flash[:notice] = "You don't have permission to show #" + params[:id] + "!"
redirect_to cash_flows_url
return false
end
とかやっている場所で,全部エラー.
そりゃそうだ.
だって,
class CashFlowsController < ApplicationController
before_filter :login_required
# 中略
end
ってやってるんだもんよ.
こういう時,どうすりゃいいんだろ.
ごり押しで解決できないことはないけど,そういうのRailsらしくない.
絶対,楽に解決できる方法があると思うんだよな.