アーカイブ

‘rails’ タグのついている投稿

New Relic

2009 年 5 月 20 日 コメントはありません

自作家計簿New Relicを導入した.
New RelicはRailsのPerformance Managemerで,PhotoShareでも有名な増井氏のblogで知った.
# masuidrive on railsはRails以外にIKEA HACK的な記事などもあって,読み物としても非常に面白い.
ローカルで開発しているときは気にならなくても,海外VPSにデプロイしてから遅さを感じることが多々あって,それがネットワークに起因するものなのかリソース(と言うかコードの効率)に起因するものなのかを切り分けたかったから.

と言うことで,増井氏が記事にされたdevelopment環境でなく,production環境の測定をLite版で.
導入手法は動画で丁寧に解説されているので,簡単.
設定ファイル(= newrelic.yml)もほとんど弄らずに使用.
続きを読む…

カテゴリー: Uncategorized タグ: , , , , ,

Nice Round Number

2009 年 5 月 18 日 コメントはありません

切りのいい数字,ってなんだろう.
そう言えば主観に依った数字だよな.
と言うことで,アンケートをとってみた.
「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に書けると思うんだよな…

カテゴリー: Uncategorized タグ: , ,

Railsで初期データ登録

2009 年 5 月 15 日 コメントはありません

自分用家計簿サイトを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に書くのが主流っぽいけど,どれもこれも一長一短に見える.
誰か,「初期データはこの方法で管理汁!」ってアドバイスがあったら教えてください.

カテゴリー: Uncategorized タグ: , , ,

新しいチケットの担当者

2009 年 4 月 26 日 コメントはありません

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 | 新規チケット作成時、デフォルトの担当者をチケット作成者にする

地味に便利.

カテゴリー: Uncategorized タグ: ,

before_filter :login_requiredでテスト失敗

2009 年 4 月 17 日 コメントはありません

市況の煽りもあって(?),個人的に家計簿サービスを作っていて,
まぁ,いわゆる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らしくない.
絶対,楽に解決できる方法があると思うんだよな.