• Like
  • Save
activerecord-oracle_enhanced-adapterのご紹介
Upcoming SlideShare
Loading in...5
×
 

activerecord-oracle_enhanced-adapterのご紹介

on

  • 1,035 views

 

Statistics

Views

Total Views
1,035
Views on SlideShare
1,035
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 今井(とよだ)と言います。\nTwitterでは@elcondorでつぶやいてます。\nよろしくおねがいします。\n\n
  • 初登場なので、「お前は何者なんだ」と思われる方が多いかと思いますので、自己紹介を簡単にします。\nRuby歴とかJRuby歴は、ここに書いた通りです。\nJRubyコミュニティへの貢献としては、日本語Cucumberを書けるようにする、JRuby本体へのパッチを書いた、というところですね。\n
  • で、いきなり今日のまとめですが、\nRailsでoracleを使う場合は、activerecord-oracle_enhanced-adapterを使いましょう、ということになります。\n
  • OracleでRails?という向きもあるかと思いますが、なんだかんだで使う局面は多いように思うのですね。\nJRubyは特に、オープンレガシー、例えばEJBアプリなんかとの連携、みたいな文脈で扱われることが多いように思うので、\n
  • で、じゃあoracle_enancedって何なのか?ってことになるんですが、Oracleに繋げるのは当然として、MRIでもJRubyでも同様に使えます。MRIではruby-oci8に、JRubyではJDBC oracle driverに依存する訳ですね。\nそれから最大の特徴ですが、「痒いところに手が届いてる」んです。というわけで、\n
  • 痒いところに手が届くってどういうことよ?ということが今日の本題です。\n前置き長いですね。\n
  • 例えば、こんなコードを考えてみましょう。\nstart_onとend_onは日付型、last_logged_atは日時型ですね。\n
  • でも、Oracleではどちらも、区別せずDATEとして取り扱います。これがどういうことを引き起こすか、というと...\n
  • 端的に言えば、RubyではDateとして扱いたいカラムが、勝手にTimeにされて困ったりする訳ですね。\n
  • ここでoracle_enhanced-adapterの登場となるわけですね。\n
  • まずは、database.ymlの設定をします。\nといっても、adapterを変える以外には何も変えなくてOKです。\n
  • ついで、モデルクラスにset_date_columnsすることで、日付扱いするカラムを指定するんですね。\n
  • とすると、こうなります。日付型として設定した値が、日付型として取り出せているのがわかりますね。\n
  • 他にも、命名規則依存の型指定とか、フラグカラムに文字列カラムを使えたり、とか、\n細かく困りそうなところに手が届いているんですね。\n
  • というわけでまとめ。\nOracleでハマりがちな罠を回避する為、oracle_enhanced-adapterを使いましょう。\n
  • \n

activerecord-oracle_enhanced-adapterのご紹介 activerecord-oracle_enhanced-adapterのご紹介 Presentation Transcript

  • activerecord-orale_enhanced- adapterのご紹介 今井( 田)尚人(@elcondor)
  • 自己紹介Ruby歴=Rails歴=3年半くらいJRuby歴=半年ちょこっと好きなメソッドはModule#included,Class#class_evalJRubyで日本語Cucumberを動くようにしました
  • 本日のまとめRailsでOracleを使う場合は、activerecord-oracle_enhanced-adapterがオススメ
  • OracleでRails?オープンレガシーな企業情報システムといえば、DBはOracleのことが多い→既存システムを活かしたままRailsを使うなら、RailsもOracleに直接つなぐのが楽JRubyは、オープンレガシーとの協調、という文脈で扱われることが多いので、OracleでRailsというのも真剣に考えておいて損はない(多分)
  • What’s oracle_enhaced? Oracle Databaseと繋げます(当たり前) MRIでもJRubyでも使えます 痒いところに手が届いてます
  • 痒いところに手が届く?
  • 例えばこんな場合class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| ... t.date :start_on, :null => false t.date :end_on t.datetime :last_logged_at ... end end ...endstart_on/end_onは日付、last_logged_atは日時
  • DB定義は... Column Type Size .... START_ON DATE 7 END_ON DATE 7LAST_LOGGED_AT DATE 7 .... .
  • DB定義は... Column Type Size .... START_ON DATE 7 END_ON DATE 7 LAST_LOGGED_AT DATE 7 .... .日付も日時も、OracleならDATE型
  • どう困る?irb(main):001:0> User.create!(:name => さんぷる, :login => sample, :password => password, :start_on => Date.current)=> #<User id: 10001, name: "さんぷる", login: "sample", password: "password", start_on: "2010-12-25 15:00:00", end_on: nil, last_logged_at: nil, description: nil, created_at: "2010-XX-XX XX:XX:XX", updated_at: "2010-XX-XX XX:XX:XX">
  • どう困る?irb(main):001:0> User.create!(:name => さんぷる, :login => sample, :password => password, :start_on => Date.current)=> #<User id: 10001, name: "さんぷる", login: "sample", password: "password", start_on: "2010-12-25 15:00:00", end_on: nil, last_logged_at: nil, description: nil, created_at: "2010-XX-XX XX:XX:XX", updated_at: "2010-XX-XX XX:XX:XX">Dateで取り扱いたいカラムがTimeにマッピングされて困る
  • そこでoracle_enhanced-adapter ですよ
  • まずはdatabase.ymldevelopment: adapter: oracle_enhanced uri: jdbc:oracle:thin:@host:1521:xe connection_alive_sql: ‘select 1 from dual’
  • まずはdatabase.ymldevelopment: adapter: oracle_enhanced uri: jdbc:oracle:thin:@host:1521:xe connection_alive_sql: ‘select 1 from dual’adapterにoracle_enhancedを指定
  • モデルクラスの実装class User < ActiveRecord::Base set_date_columns :start_on, :end_on ...end
  • モデルクラスの実装 class User < ActiveRecord::Base set_date_columns :start_on, :end_on ... endset_date_columnsで日付扱いするカラムを指定
  • それでどうなった?irb(main):006:0> User.create!( :name => さんぷる,:login => sample, :password => password, :start_on => Date.current)=> #<User id: 10002, name: "さんぷる", login: "sample", password: "password", start_on: "2010-12-25", end_on: nil, last_logged_at: nil, description: nil, created_at: "2010-12-25 22:18:58", updated_at: "2010-12-25 22:18:58">
  • それでどうなった?irb(main):006:0> User.create!( :name => さんぷる,:login => sample, :password => password, :start_on => Date.current)=> #<User id: 10002, name: "さんぷる", login: "sample", password: "password", start_on: "2010-12-25", end_on: nil, last_logged_at: nil, description: nil, created_at: "2010-12-25 22:18:58", updated_at: "2010-12-25 22:18:58"> set_date_columnsメソッドによって、 日付型としての取り扱いを強制できた
  • それだけ?他にも命名規則で日付型かどうかを決めたり文字列カラムをフラグに使えたりとか細かく困りそうなところに手が届く
  • というわけで再まとめOracleでハマりがちな罠を回避するのに、activerecord-oracle_enhanced-adapterが役立つので、ぜひ使いましょう% (sudo) jruby -S gem install activerecord-oracle_enhanced-adapter