サブドメインでアクセスした時にデータベースを切り替える(rails)
ステージングをサブドメインに設定して(staging.*****.jp)そのアドレスの時接続データベースを切り替える方法です。
環境
・EC2(CentOS)・RDS(MySQL)
・ムームードメイン
前提
ムームードメインでドメイン取得済み
route53でドメイン設定済み
流れ
・ムームードメインでサブドメインの設定・route53でDNSの設定
・mysqlに新しいdbを作成
・railsでサブドメインごとに振り分け
ムームードメインでサブドメインの設定
まずムームードメイン(https://muumuu-domain.com/?mode=conpane)にログインします。
"処理"の"変更"をクリックしてください。以下の画面に飛びます。
ここでサブドメインの設定をします。
>サブドメイン:設定したいサブドメイン名を入力します >種別:ここではAとします >内容:サーバーのIPアドレスを入力します
セットアップ情報変更ボタンを押していただければムームードメイン側の設定は完了です。
route53の設定
route53(https://console.aws.amazon.com/route53/home)に入ります。
"CreateRecordSet"から新しくレコードを作成します。
>Name:ワイルドカード(*)を指定 >Alias:Yesにチェック >Alias Target:自分のドメインを選択
"Create"ボタンを押せば設定完了です。
以上でサブドメインの適用が終わりました。いったん適用されているかをアクセスして確認してみてください。
MySQLにサブドメイン用のデータベースを作成
MySQLに直接入ってデータベースを作ります。以下のコマンドでMySQLに入ってください。
$ sudo mysql -h <dbのアドレス> -P 3306 -u <ユーザーネーム> -p <dbの名前>
入ったらデータベースを作成します。
mysql> create database staging_db;
以下のコマンドでちゃんと追加されているか確認してください。
mysql> show databases;
これで作成完了です。
railsでサブドメインごとに振り分け
rails内のファイルを修正してサブドメインによって使用するデータベースを振り分けていきます。
サブドメイン用データベースの作成
まず、database.ymlを編集します。
#config/database.yml default: ... develop: ... test: ... production: ... #以下を追加 staging_db: adapter: mysql2 encoding: utf8 reconnect: false database: staging_db pool: 5 username: <ユーザーネーム> password: <パスワード> socket: /var/lib/mysql/mysql.sock host: <ホストアドレス> port: 3306
次に、マイグレーションを通すために環境ファイルを追加します。
config/environments/production.rbをコピーしてconfig/environments/staging_db.rbとします。
$ cp config/environments/production.rb config/environments/staging_db.rb
これでマイグレーションが通ります。
$ rake db:migrate RAILS_ENV=staging_db
サブドメインによる振り分け
振り分けにはrequestを使います。
request - リファレンス - - Railsドキュメント
request.subdomainを呼び出すと、アクセスした時そのサブドメインを取得することができます。
app/controllers/application.rbに以下を追加してください。
#app/controllers/application.rb before_action :request_dist protected def request_dist if request.subdomain=="staging" User.establish_connection :staging_db Address.establish_connection :staging_db else User.establish_connection :production Address.establish_connection :production end end
サブドメインがstagingの時のみUserモデルとAddressモデルは別のデータベースに接続するように設定しました。
これでサブドメインでアクセスした時に接続dbを切り替えることができました。
参考
以下のページを参考にさせてもらいました。ありがとうございます。- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る