2011-07-25 4 views
3

私はshopifyのようなマルチテナントアプリケーションを作成していますが、同じアプリケーションインスタンスを指し示すサーバー上にカスタムドメインを作成する方法を知りたいですか?私はGoogle AppsのようなCNAMEにその設定を行う必要がありレール上にカスタムドメインを持つマルチテナント

app1.mysystem.com == www.mystore.com 
app2.mystem.com == www.killerstore.com 

:たとえば ?もしそうなら、どうしたらいいですか?これがどのように機能するかを示す良い紙がありますか?

PS:app1とapp2は同じアプリケーションを指しています! ありがとう

答えて

6

同様のセットアップがあり、nginXを使用しています。私がメンテナンスを容易にするためにしたことは、nginxからのすべての接続を受け入れ、私のアプリでフィルタリングを行いました。

# application_controller.rb 
before_filter :current_client 

private 
def current_client 
    # I am using MongoDB with Mongoid, so change the syntax of query accordingly 
    @current_client ||= Client.where(:host => request.host).first 
    render('/public/404.html', :status => :not_found, :layout => false) unless @current_client 
end 

あなたはあなたのクライアントがyou_ipまたはyour_domain_pointing_to_your_ip.comを指しているが、ドメイン/サブドメインでドメインレコードを持っており、形でそれをキャプチャし、データベースに保存することができます。私は現在、何か似て働いていますし、ちょうどnginxの設定がした

@current_client ||= Client.or(:host => request.host).or(:alias => request.host).first 
+0

同じことをやろうとしましたが、すべての接続を受け入れる方法は100%わかりません。あなたはあなたのnginx confを投稿できますか? –

0

:次にようcurrent_clientにクエリを変更します。これが私のやり方です。

server { 
    listen 80; 
    server_name domain1.com domain2.com domain3.com; 
    rails_env production; 
    passenger_enabled on; 
    root /var/www/your_site_folder/current/public; 
} 

また、乗客を使用している場合は、必ずpassenger_pre_startを実行してください。

例:passenger_pre_start http://your_domain.com;

上記の設定ブロックに追加するドメインごとに1行追加します。

ここでのキーはserver_nameの下にあります。通常、私はwww.domain.comを使用しているか、 'www'、domain.comを使用していないドメインでこれを使用します。しかし、この場合、ここからあなたのアプリにヒットしたいすべてのドメインを指すことができ、マルチテナンシー用のNginx設定があります。

関連する問題