База данных Codeigniter не будет подключаться через фреймворк только на одном сервере - PullRequest
2 голосов
/ 20 июня 2011

В database.php у меня есть:

$db['default']['username'] = IS_PRODUCTION ? 'prodUsername' : 'localDevBoxUsername';
$db['default']['password'] = IS_PRODUCTION ? 'prodPassword' : 'localDevBoxPassword';

Мой код:

function test()
{
    $this->load->database();
    $result = $this->db->query('SELECT * FROM items WHERE description='Oranges');
    echo 'rows:' . $result->num_rows();
}

Когда я запускаю это в prod, он не работает.

Теперь для тестированияэто не проблема конфигурации базы данных, я создал базовый файл PHP с именем test.php с:

<?
if (! $db=@mysql_connect ("localhost", "prodUsername", "prodPassword")) 
   die("Error connecting to mysql");

@mysql_select_db("prodDatabase") or die("error connecting to specific database");

$result = @mysql_query('SELECT * FROM items WHERE description='Oranges');
echo 'rows: ' . mysql_num_rows($result);
?>

Сценарий php test работает отлично.Код codeigniter работает только для моего локального dev-бокса, но не для prod-бокса.Чего я мог пропустить ????

Обновление: Обратите внимание, что, хотя я использую константу IS_PRODUCTION в примере кода, это не проблема.Я вытащил ценности и запрограммировал их.Я просто включил его, чтобы сделать пример более лаконичным, чтобы он так показывал, что он работает в одной среде, а не в другой

Update2: Кажется, что проблема связана только с моделью.Как только я перемещаю код в контроллер, он работает ...

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

CodeIgniter 2.0 предлагает больше гибкости в этом.Создайте в своей папке application / config папку с именем development и production и скопируйте в нее папку config.php, database.php.

Проверьте файл index.php в корневой папке.* с этого момента, пока ENVIROMENT определено как development, ваш проект ищет каталог application / config / development.если вы измените его на production, он будет использовать application / config / production.

0 голосов
/ 03 июля 2011

Проблема оказалась в соглашениях об именах, используемых для имен файлов моделей. В моей локальной среде разработки чувствительность к регистру, требуемая CodeIgniter, не применялась по какой-либо причине (некоторая конфигурация в PHP и т. Д., Я не знаю - я использовал xmapp для разработки локальных рабочих столов в этом конкретном проекте). После того, как файлы модели были названы в соответствии со спецификациями CodeIgniter, все заработало как запланировано.

Поэтому, если ваш код базы данных работает в контроллере, но не в модели, обязательно подтвердите файл модели с именами соглашений (а также конструкторов классов).

0 голосов
/ 20 июня 2011

Я думаю, что вы проверяете такие константы в троичных операторах (чтобы вернуть FALSE, если константа не определена. См. CONSTANTS в руководстве по php) Но я не знаю, где вы определяете это IS_PRODUCTION, поэтому другое опубликованное решение выглядит лучше для разделения сред.

$db['default']['username'] = defined('IS_PRODUCTION') ? 'prodUsername' : 'localDevBoxUsername';
$db['default']['password'] = defined('IS_PRODUCTION') ? 'prodPassword' : 'localDevBoxPassword';

или constant('IS PRODUCTION') (но это возвращает NULL, если не определено)

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