5

ColdFusion アプリケーションがあります。複数のドメインまたはサブドメインに対して同じコードベースを (複製するのではなく) 実行できるようにしたいと考えています。各サイトは、ブランド化、スキン化、異なるタイトルなどを除いて、基本的に同じです。

だから、私が探しているのは、www.abc.com と www.xyz.com と beta.mycompany.com をすべて同じコードベースで実行する方法です。新しいクライアントがサインオンするたびに、新しいドメインをすばやく追加できることが理想的です。

この質問は PHP と Rails について見たことがありますが、CF については見たことがありません。これが私が考えていたことです(そしてうまくいくようです)が、パフォーマンスの問題やよりクリーンな提案があるかどうか疑問に思っていました.

IN APPLICATION.CFC


<cfif cgi.server_name EQ "www.abc.com"  >
    <cfset request.client_id=1>
<cfelseif cgi.server_name EQ "www.xyz.com">
    <cfset request.client_id=2>
... etc             
<cfelse>
    This application not configured.
    <cfabort>   
</cfif>

ここで、すべてを client_id から外します...

4

3 に答える 3

4

アプリケーション インスタンスは Application.name に基づいています。

各インスタンスに異なる名前を付けるだけです

application.cfc には、次のようなものがあります

<cfcomponent>

    <cfset this.name = replace(CGI.HTTP_HOST, '.', '', 'all') />

ドメインごとに異なるアプリケーション名が発生するようになったため、インスタンスとアプリケーション変数のセットなどが分離されました。

于 2011-10-26T04:39:57.900 に答える
3

私も似たようなことをしていますが、すべての情報をデータベースに保管しています。これにより、新しい Web サイトの追加がはるかに簡単になり、新しいクライアントやテンプレートごとにコードを変更する必要がなくなります。

application.cfc からの私のコードは次のとおりです。

<cffunction name="OnApplicationStart">
  <cfset application.websites = structNew()>

  <cfquery name="sites">
    SELECT websiteID, url FROM websites
  </cfquery>

  <cfloop query="sites">
    <cfset application.websites["#url#"] = CreateObject("component", "websites").init(websiteID)>
  </cfloop>
</cffunction>

これで、アプリケーションが応答するように構成された Web サイトのコレクションができました。各サイトはテンプレートをロードします。テンプレートもデータベースに保存されるため、各サイトを任意のテンプレートに簡単に構成できます。

リクエストごとに、正しいウェブサイトを見つける必要があります。

<cffunction name="OnRequestStart">
  <cfargument name="targetPage">

  <cfif structKeyExists(application.websites, cgi.SERVER_NAME)>
    <cfset request.website= application.websites["#cgi.SERVER_NAME#"]>
  <cfelse>
    <cfabort>
  </cfif>

  <cfset request.template = request.website.template>
</cffunction>

これで、各リクエストで Web サイトとテンプレートが利用できるようになりました。

これを使用して、1 つのコードベースとデータベースから 3 つの異なるテンプレートを使用して 3 つの e コマース サイトを実行しています。

于 2011-10-26T13:56:12.867 に答える
2

はい、それはうまくいきます。それを Application.cfc に入れます。これを使用して、DEV と PROD に異なるアプリケーション変数を設定しました。

アプリケーション.cfc:

     <CFIF not CGI.HTTP_HOST EQ "www.example.com" AND not CGI.HTTP_HOST EQ "example.com">
       <CFSET Application.Environment = "Dev">
       ...
     <CFELSE>
       <CFSET Application.Environment = "Prod">
       ...             
     </CFIF>
于 2011-10-26T01:30:56.383 に答える