как запустить несколько сайтов на одной кодовой базе в базе ColdFusion на домене или поддомене - PullRequest
5 голосов
/ 26 октября 2011

У меня есть приложение 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 ...

Ответы [ 3 ]

4 голосов
/ 26 октября 2011

Экземпляр приложения основан на Application.name

, поэтому вы просто называете каждый экземпляр по-разному

В application.cfc вы можете получить что-то вроде этого

<cfcomponent>

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

Каждый домен теперь вызывает другое имя приложения, таким образом, отдельный экземпляр и наборы переменных приложения и т. Д.

3 голосов
/ 26 октября 2011

Я делаю нечто подобное, но храню всю информацию в базе данных.Это значительно упрощает добавление новых веб-сайтов и не требует никаких изменений кода для каждого нового клиента или шаблона.

Вот мой код из 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>

Теперь яиметь коллекцию веб-сайтов, на которые настроено приложение.Каждый сайт загружает свой шаблон.Шаблоны также сохраняются в базе данных, поэтому каждый сайт может быть легко настроен на любой шаблон.

Для каждого запроса нам просто нужно найти правильный веб-сайт:

<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>

Теперь каждыйВ запросе есть веб-сайт и шаблон, доступные через него.

Я использую это для запуска 3 сайтов электронной коммерции с 3 различными шаблонами из одной базы кодов и базы данных.

2 голосов
/ 26 октября 2011

Да, это будет работать.Я бросаю это в мой Application.cfc.Я использовал это для установки различных переменных приложения для DEV и PROD.

Application.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>
...