RubyonRailsでのselect_dateの使い方

2009-01-20
このエントリーをはてなブックマークに追加

何回書いても忘れてしまう。

view側

<%= select_date(Date.now, :use_month_numbers => true, :prefix => “from_date”) %>

Controller側

from_date = Date.parse(params[‘from_date’][‘year’] + “-” + params[‘from_date’][‘month’] + “-” + params[‘from_date’][‘day’])

これで日付型のfrom_dateに格納される。
ただ、不正な日付(2月31日等)はparseのタイミングでエラーが出るので、正確な日付かどうかのチェックは必要。

Date.valid_date?(params[‘from_date’][‘year’].to_i,params[‘from_date’][‘month’].to_i,params[‘from_date’][‘day’].to_i)

NGの場合はnilが返ってくる。

とんび

2009-01-06
このエントリーをはてなブックマークに追加

 

ただひたすらに純粋な親子の愛。電車の中で読んでいたのでどうにかこらえたが、自宅で読んでいたら確実に声を出して泣いていた。美しすぎる。切なすぎる。

自分にももうすぐ2歳になる息子がいます。ついつい自分と息子を重ねてしまいます。

この本は、すべての人に読んで欲しい。子を持つ親に限定はしない。この本は親子愛を語っているのではない、人の愛を語ったいる。そう感じました。すばらしい本でした。

RubyonRailsでBackgrounDRbを使って定期イベント、非同期処理を行う

2009-01-06
このエントリーをはてなブックマークに追加

開発環境はWindows、本番環境はLinuxであったために悲しいことになった。Windows上ではforkが動かない(実装されていない)ので、BackgrounDRbを稼動させると怒られてしまう。まぁコーディングだけしてテストサーバにアップ、テストというちまちましたことを繰り返せば済む話なので我慢しましょう。

では、まずはインストールから。

gem install chronic packet
ruby script/plugin install http://svn.devjavu.com/backgroundrb/trunk
rake backgroundrb:setup

インストールはコレだけです。BackgrounDRbはgemじゃなくて、Railsプロジェクとに対してインストールするということですね。複数のプロジェクトがあったら、それごとにインストールします。この場合、インストールという表現は不適切なんでしょうね。

rakeを実行するとBackgrounDRb用のマイグレーションファイルができあがっています。ジョブのキューを保存しておくためのモノっぽいです。これを実行しておかないとBackgrounDRbを起動させたときに怒られます。怒られてばっかりですね。

ruby script/generate worker hoge

これでhogeというworkerができます。中に「create」っていうメソッドがありますが、コンストラクタですね。自分でメソッドを追加します。ここで嬉しいのがActiveRecordやActionMailerが使えることでしょうか。まぁ当然なのですが、非常にありがたいです。


:backgroundrb:
  :ip: localhost
  :port: 11006
:schedules:
  :hoge_worker:
    :hogehoge:
      :trigger_args: 0 * * * * * *

backgroundrb.ymlに上記のように書いておくと、毎分0秒にHogeWorderのhogehogeというメソッドを実行してくれます。インターバルはcrontabと同じ書き方ですが、「秒」と「年」が増えています。「年」って使うのかなぁ。。。オリンピックリマインダー?

コントローラなどから処理を投げたいときには

MiddleMan.new_worker(:worker => :hoge_worker, :method_name => :hogehoge)

と記述します。もちろん引数も渡せます。

 ちなみに、BackgrounDRbは事前に起動しておく必要があります。リスナーが別スレッドで待っていて、それに対して処理を投げるようなイメージでしょうか。若干メモリが不安です。

ruby script/backgroundrb start
ruby script/backgroundrb stop

これで起動と終了です。複数同時起動はしません。

インストールの仕方等々、バージョンによって違いがあるような気がします。細かいところで悩んだことが多かったです。備忘録を兼ねて、同じことで悩んでいる方の助けになればと思います。