Rails3で1つのアプリケーション内に複数ドメインのサービスを提供させる方法
PCとモバイルでドメインを別にしてサービスを提供することもあると思う。
その場合アプリケーションを別にしてもいいのだがモデルを共有したい場合もある。
そういう時はconfig/routes.rbでconstraints指定をしてrequestされたhost名でコントローラを出し分ける。
新規Railsアプリを作成して、名前空間付きで同名のコントローラを生成する。
$ rails -v Rails 3.2.9 $ rails new yahoo $ cd yahoo $ rails generator controller pc::sports $ rails generator controller mobile::sports
routes.rbにconstraintsブロックを追加してhostの設定をする。
Yahoo::Application.routes.draw do constraints :host => "www.yahoo.co.jp" do get "sports" => "pc::sports#index" end constraints :host => "m.yahoo.co.jp" do get "sports" => "mobile::sports#index" end end
それぞれのcontrollerで別の表示がされるように調整
PC
class Pc::SportsController < ApplicationController def index render :text => "PC", :status => 200 end end
MOBILE
class Mobile::SportsController < ApplicationController def index render :text => "MOBILE", :status => 200 end end
HOSTS設定をする
127.0.0.1 www.yahoo.co.jp m.yahoo.co.jp
開発サーバを起動
$ rails server
これでブラウザからそれぞれのURLにアクセスすると別ページが表示される
http://www.yahoo.co.jp:3000/sports
http://m.yahoo.co.jp:3000/sports