2016/06/15
Ruby On Railsから既存アプリケーションのデーターベースに接続する
Ruby On Railsからphpなど他言語で作成された既存アプリケーションのデータベースアクセスするという実装を先日行ったので、その方法を記事にしてみました。
既存アプリケーションのデータベースに接続することを Legacy (existing) なデータベースに接続すると表現したりすることもあるようです。
Ruby On Railsのアプリケーションを作成する
Railsのapi用のアプリケーション生成もできますが、ここでは通常のものを用います。
1 | rails new api |
database.ymlの設定を行う
1 2 3 4 5 6 7 | adapter: mysql2 encoding: utf8 pool: 5 database: データベースの名前 username: ユーザーの名前 password: パスワード host: 192.168.xxx.xxx |
モデルを生成する
既存のデータベースのそれぞれのテーブルに接続するためのモデルを生成します。
wordpressのpostテーブルにアクセスするモデルをPostとする場合、
1 | rails g model post |
を実行し、モデルを生成します。
モデルごとの設定を行う
ここまでくるとほぼ準備は終わりなのですが、
この状態でPost.find(1)などとrailsのActive Recodeを実行すると、Railsはpostsテーブルを探してそこに接続しようとしてしまうます。
なので、各モデルがどのテーブルに接続するか定義する必要があります。
1 2 3 | class Post < ActiveRecord::Base self.table_name = 'wp_posts' end |
モデル毎に接続するデータベースも切り替えることもできます。
1 2 3 4 5 6 7 8 9 10 | class Post < ActiveRecord::Base establish_connection :adapter => 'mysql2', :encoding => 'utf8', :database => 'データベース', :username => 'ユーザー名', :password => 'パスワード', :host => 'ホスト名', :pool => '5' self.table_name = 'wp_post' end |
以上で準備は完了!!
以上で準備は完了です。
rails console上で、
Post.find(10)とうってみるとRailsのActive Recodeが使えることが確認できます。
* Access denied for user ‘root’@’ホスト名 などと出たら接続先のデータベースでアクセスを許可する必要があります。
まとめ
Author Profile
スターフィールド編集部
SHARE