Решение для многосерверной среды с веб-сайтом CodeIgniter - PullRequest
3 голосов
/ 10 февраля 2010

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

Каким было бы хорошее (и быстрое) решение, которое я мог бы добавить, которое позволило бы мне устанавливать эти переменные, используя только одну настройку. Где было бы наилучшим местом для вставки этого в index.php, своего рода хук?

Ответы [ 5 ]

6 голосов
/ 11 апреля 2012

Если вы используете Apache, вы можете установить переменную окружения, которая может быть прочитана PHP в вашем файле Virtual Hosts для сайта:

<VirtualHost *:80>
    DocumentRoot /path/to/site
    ServerName local.mysite.com
    ErrorLog /path/to/error_log
    CustomLog /path/to/access_log common
    <Directory /path/to/site>
        SetEnv ENVIRONMENT local
        RewriteEngine On
        Options FollowSymLinks Indexes
        AllowOverride AuthConfig Options FileInfo
    </Directory>
</VirtualHost>

Итак, теперь вы можете проверить и настроить серверную среду соответствующим образом в файле index.php:

// always default to production for safety
$environment = 'production';

// check for an environment override
if (function_exists('apache_getenv') && apache_getenv("ENVIRONMENT")) {
  $environment = apache_getenv("ENVIRONMENT");
} else if (getenv("ENVIRONMENT")) {
  $environment = getenv("ENVIRONMENT");
}

// set the environment constant
define('ENVIRONMENT', $environment);

Благодаря этой настройке вы теперь можете свободно развертывать свои сайты и добавлять дополнительные параметры конфигурации в файлы application/config/[file].php для каждой среды.

Alternative ...

Еще одна возможность для обработки настроек нескольких сред - это создание файла вне корня документа, который игнорируется вашей системой контроля версий (т.е. .gitignore), в которой содержится значение серверной среды. Затем вы можете просто прочитать этот файл через file_get_contents() или эквивалентный.

2 голосов
/ 08 марта 2011

Старый вопрос, но Codeigniter Reactor имеет встроенную поддержку переменных среды. Вы просто открываете файл index.php и выбираете свою среду. О них есть пост здесь: http://ilikekillnerds.com/2011/03/how-to-use-codeigniter-reactor-environment-variables/

2 голосов
/ 11 февраля 2010

определяет константу "LIVE", которая имеет значение TRUE или FALSE на основе текущего домена (включите это в файл index.php)

if(strpos($_SERVER['HTTP_HOST'], 'mylivesite.com'))
{
    define('LIVE', TRUE);
}
else
{
    define('LIVE', FALSE);
}

, а затем проверьте, живы вы или нет, и присвойте переменные соответственно

if(LIVE)
{
    $active_group = "production";
}
else
{
    $active_group = "test";
}

я делал это с нашей 5 настройками среды в течение прошлого года без проблем

1 голос
/ 15 февраля 2010

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

1 голос
/ 10 февраля 2010

Официальный CodeIgniter документ предлагает это для нескольких баз данных:

Переменная Gobal в файле config.php для установки среды:

$ active_group = "test";

Несколько настроек в database.php

$db['test']['hostname'] = "localhost";
$db['test']['username'] = "root";
$db['test']['password'] = "";
$db['test']['database'] = "database_name";
...

$db['production']['hostname'] = "example.com";
$db['production']['username'] = "root";
$db['production']['password'] = "";
$db['production']['database'] = "database_name";
...

Подробнее см. В документе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...