LoginSignup
2
1

More than 5 years have passed since last update.

Rails MySQLを使用するアプリケーションでMSSQLServreにも接続する

Last updated at Posted at 2017-06-30

カオスじゃないかこれは:imp:

前提条件

  • 新アプリケーションではRails + MySQLを使用する。
  • 既存のアプリケーションはSQLServreを使用している。
  • SQLServreはWindowsServerに配置されている。

実現したいこと

新アプリケーションで登録があった場合、
新アプリケーションDB・既存アプリケーションDB共に更新する。

実装:writing_hand:

SQLServerを使うためのgemを導入する

Gemfile
# SQLServer用
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'

そしていつもの

$ bundle install

しかしこれはエラーとなる。
tiny_tdsを使用するにはFreeTDSが必要。

$ brew install freetds
# または
$ yum install freetds freetds-devel

そのあとに

$ bundle install

これでgemの導入は完了。

SQLServreの情報をセット

database.ymlにSQLServreの情報をセットする。

database.yml
# ここら辺はMySQL用の設定
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: [username]
  password: [password]
  host: [host]

development:
  <<: *default
  database: management_development

test:
  <<: *default
  database: management_test

production:
  <<: *default
  database: management_production
  username: management
  password: <%= ENV['DATABASE_PASSWORD'] %>
# 以下を追加
# MSSQLサーバー用
sqlserver:
  adapter: sqlserver
  host: [host]
  database: [database]
  port: [port]
  username: [username]
  password: [password]

Modelの作成

直SQLを実行するだけの機能を実装。
ApplicationRecordは継承しない。

msss.rb
# MSSQLServerにつなぐもの
class Msss
  # SQL文を実行する
  def self.exec(sql)
    sscnf = Rails.configuration.database_configuration['sqlserver']
    client = TinyTds::Client.new(
      adapter: sscnf['adapter'],
      host: sscnf['host'],
      database: sscnf['database'],
      port: sscnf['port'],
      username: sscnf['username'],
      password: sscnf['password']
    )
    client.execute(sql)
  end
end

使用例:santa:

単純なSELECT文を実行し、その結果を取得する例

testcontroller.rb
class TestController < ApplicationController
    def test
        result = Msss.exec("SELECT * FROM [list] ")
        result.each do |row|
            puts row["name"]
        end
        render :text => "text"
    end
end

もちろんUPDATEやINSERTも可能。

参考にさせていただいたサイト:bow:

Rails3でSQLServerに接続してみたよ
[Rails][AzureSQLデータベース]Macでtiny_tdsのbundle installが通らない時の対処法

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1