У меня есть два подхода к этому, оба из которых хорошо служили. Сначала я начну с самого простого подхода, который я бы назвал «статическим». Я использую это, когда у меня не так много настроек для среды ... может быть, небольшая часть.
Я предполагаю, что у вас есть файл Application.cfc или .cfm для вашего приложения. Там вы можете установить переменную, что-то вроде «application.environment», и по умолчанию она будет установлена на «dev». В вашем приложении вы можете проверить эту переменную, чтобы определить, где вы находитесь.
Когда вы упаковываете приложение для развертывания, вы можете затем изменить этот файл Application.cfc вместо «.
Теперь, это будет раздражать, поэтому я просто использую муравьев для этого. Я просто использовать что-то вроде этого в моем build.xml, который живет в том же каталоге, Application.cfc:
<replace file="Application.cfc" token="DEV" value="PROD" casesensitive="true" />
А потом пронестись приложение для развертывания:
<zip destfile="${zipdir}/MyApp-Production.zip">
<zipfileset dir="." prefix="MyApp" />
</zip>
Затем я разворачивать молнию , Если я работаю над небольшим проектом, в котором используется FTP, а не с помощью какого-либо корпоративного развертывания enterprise enterprise, то у меня просто будет ANT-задача, что файлы FTP-файлов на мой производственный сервер, и он также выполнит эту замену на Application.cfc и нажмите этот файл тоже.
Для большинства приложений, над которыми я работаю, я использую две таблицы базы данных для управления средами. Мы делаем это, потому что у нас много разных сред, и у каждого из них разные настройки, обычно они сосредоточены вокруг файловой системы и сетевых путей, которые различаются для каждой среды (давайте не будем говорить о том, почему они разные ... полностью отдельное обсуждение). Итак, у нас есть таблица, которую мы называем «AppLocations»:
LocationID | LocName | LocDesc | Настройка1 | Настройка2 | Настройка 3 | ...... 1 | Местные | «Локальная среда» | что угодно ..... 2 | Dev | «Среда разработки» | что угодно .... 3 | Тест | «Испытательная среда» | что угодно .....
и так далее.
Тогда мы еще одна таблица с именем "AppLocationHosts"
LocationID | LocHostName 1 | 'localhost' 2 | 'devservername' 2 | 'otherdevservername' 3 | 'testservername' 3 | 'othertestserver'
и так далее.
затем, в Application.cfc, в onApplicationStart, мы сделать этот запрос
SELECT TOP 1 *
FROM AppLocations
WHERE LocationID IN (SELECT LocationID FROM AppLocationHosts WHERE LocHostName = <cfqueryparam value="#CGI.HTTP_HOST#" cfsqltype="cf_sql_varchar"/>)
И оттуда, как только мы знаем, что место мы в основе на матч HTTP_HOST, мы устанавливаем эти «Настройка» столбцы в сферу применения:
<cfloop list="#qryAppPathLocations.ColumnList#" index="ColName">
<cfset application[ColName] = qryAppPathLocations[ColName]>
</cfloop>
Этот подход не для всех, но в нашей странной среде, где консистенция является необычным, это был очень гибкий подход.
Теперь, если у вас буквально есть только две среды, а одна из них - «localhost», а другая - «www.myapp.com», то самым простым было бы просто выполнить проверку на http_host в onApplicationStart и если вы находитесь в «www.myapp.com», то вы делаете свою настройку для конкретной продукции. Возможно, здесь вы задаете такие вещи, как «request.querydebug = true», а затем, когда вы находитесь в производстве, вы отключите это. Тогда ваши запросы могут использовать этот флаг, чтобы определить, включать или отключать отладку для cfstoredproc и query. Хотя я должен сказать, я настоятельно рекомендую против этого.
Является ли URL-адрес разным в каждой среде? Если это так, область CGI имеет ваш ответ. –