ここや他の場所でいくつかの同様の質問があるにもかかわらず、私はこの問題の実行可能な解決策を見つけることができませんでした。Rails 3ではこの質問に回答されていない可能性が高いため、次のようにします。
現在、ユーザーがアプリケーションのインスタンスを含む独自のサブドメインを作成できるようにするアプリケーションがあります。Rails 2では、subdomain-fu gemを使用するのが最適でしたが、バージョン3では、Railscast(http://railscasts.com/episodes/221-subdomains-in-rails-3)のように、劇的にシンプルになっています。
これは良いことですが、ユーザーが自分のドメイン名を自分のアカウントに関連付けるためのオプションも提供したいと思います。したがって、http://userx.mydomain.comがあるかもしれませんが、http://userx.comも関連付けることを選択してもらいたいと思います。
Rails 2でこれを行うためのいくつかの参照を見つけましたが、それらの手法はもう機能していないようです(特にこれ:https://feefighters.com/blog/hosting-multiple-domains-from-a-single-rails -app /)。
ルートを使用して任意のドメインを受け入れ、それをコントローラーに渡して適切なコンテンツを表示する方法を誰かが推奨できますか?
更新:Leonidのタイムリーな応答とコードの見直しのおかげで、私は今ほとんどの答えを得ています。最終的には、(Railscastソリューションから)使用していた既存のサブドメインコードに追加してから、routes.rbにビットを追加する必要がありました。私はまだそこまで来ていませんが、これまでに持っているものを投稿したいと思います。
lib / subdomain.rb内:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
class Domain
def self.matches?(request)
request.domain.present? && request.domain != "mydomain.com"
end
end
最初のクラスを模倣して2番目のクラスを追加しました。これは、動作することが知られています。着信ドメインがメインサイトをホストしているドメインではないことを保証する条件を追加するだけです。
このクラスはroutes.rbで使用されます:
require 'subdomain'
constraints(Domain) do
match '/' => 'blogs#show'
end
constraints(Subdomain) do
match '/' => 'blogs#show'
end
ここでは、既存のサブドメインコードの前に、ドメインをチェックするためのスタンザを追加しています(これも正常に機能しています)。このサーバーがそのドメインに応答し、メインサイトが動作しているドメインではない場合は、指定されたコントローラーに転送します。
それは機能しているように見えますが、まだすべてが機能しているわけではありませんが、この特定の問題は解決されたと思います。