0

複数のドメインを提供する Rails 2 アプリがあります。つまり、http://domainA.comhttp://domainB.comはどちらも同じ Rails アプリによって提供されます。siteこれらを手動で起動するときは、変数を渡して表示するサイトを指定します: site=domainB ruby script/server.

http://domainA.myapp.devhttp://domainB.myapp.devを介して両方のサイトにアクセスできるように、Pow を使用したいと思います( http://domainA.devhttp://domainB.devの方が簡単な場合)。

export site="domainB"ファイルに追加することでこれを手動で行うことができ、サイトを切り替えるたびにそれを手動で.powrc編集します(その後、 を実行しtouch tmp/restart.txtます)...ただし、もう少し自動化したい. subdomain == domainA ? export site="domainA" : export site="domainB"ファイル内に相当するようなものを考えてい.powrcます。

4

2 に答える 2

0

私はこれを行う方法を考え出し、それについてのブログ投稿をここに書きました。これがそのやり方の要点です...

before_filterアクセスされているドメインを取得し、それを Rails アプリ全体で使用するように構成しました。サイトが標準の Rails アプリ経由でアクセスされている場合、ドメインはありません (単に になりますlocalhost)。その場合、はコマンド ラインで渡されbefore_filterた変数を探しsiteます (それが渡されない場合は、既定のサイトを使用します)。

def set_site
  if RAILS_ENV == "development"
    session[:site] = case request.domain
      when "domainA.dev" then "domainA"
      when "domainB.dev" then "domainB"
      else ENV['site'] || "domainA"
    end
  else session[:site].blank?
    if RAILS_ENV == "staging"
      session[:site] = case request.subdomains.last # *.yourstagingdomain.com
        when "domainA" then "domainA"
        when "domainB" then "domainB"
      end
    elsif RAILS_ENV == "production"
      session[:site] = case request.domain
        when "domainA.com" then "domainA"
        when "domainB.com" then "domainB"
        else "domainA"
      end
    else
      session[:site] = "domainA" # default
    end
  end
  if @site.nil?
    @site ||= Site.find_by_name(session[:site])
  end
end

すべては実際には Rails 内で行われます。Pow が関与する唯一のことは、Rails アプリによって提供される各サイトのシンボリック リンクが必要なことです。

シンボリック リンクは、request.domainでチェックされているものとも一致する必要がありますbefore_filter。したがって、この例では、 と の 2 つのシンボリック リンクがdomainAありdomainBます。

于 2012-06-12T16:47:11.320 に答える
0

rake pow[SITENAME]より自動化されたソリューションが見つかるまで、サイトを切り替える次の rake タスクを作成しました。このコードはGistとしても利用できます。

desc "Switches site that Pow serves"
task :pow, :site_name do |t, args|
  pow_config = "#{Rails.root}/.powrc"
  args.with_defaults(:site_name => "domainA")

  # Overwrite .powrc file with new site name
  file = File.open(pow_config, 'w')
  file.write "if [ -f \"$rvm_path/scripts/rvm\" ] && [ -f \".rvmrc\" ]; then
source \"$rvm_path/scripts/rvm\"
source \".rvmrc\"
fi

export site=#{args.site_name}"
  file.close

  # Restart Pow
  FileUtils.touch "#{Rails.root}/tmp/restart.txt"

  # Announce site change
  puts "Switched to #{args.site_name}"
end
于 2012-06-08T20:37:55.930 に答える