[Решено] db_set_active() - приводит к "Site off line"

Главные вкладки

Аватар пользователя Sun-fire Sun-fire 6 ноября 2010 в 18:49

В процессе написания модуля возникла необходимость получать данные из базы, которая хранится на другом хосте. Нашел и прочитал http://drupal.ru/node/19457

Описал в settings.php подключение к нужной бд. Описал в модуле вызов db_set_active() к нужной базе, а после - возврат к дефолтной. Все это завязал на клик по пункту меню в админке.

И тут появился трабл:при клике на соответствующий пункт меню - вместо того, чтобы нормально отработать подключение к чужой базе и вернутся к дефолтной, сайт переводится в состояние Site off-line. В чем может быть трабл?

Комментарии

Аватар пользователя Sun-fire Sun-fire 6 ноября 2010 в 20:06

Нет, в settings.php все нормально:
Новую базу добавил примерно таким образом:

$db_url['default'] = 'mysql://root@localhost/mainbase';
$db_url['optional'] = 'mysql://login:password@hostname/basename';

Соответственно в обработчике вызываю:

db_set_active('optional');

а после:

db_set_active('default');

В добавок: если после этого перейти на главную, или на какую либо другую страницу сайта - все работает нормально.

Аватар пользователя edhel edhel 6 ноября 2010 в 20:20

если между двумя db_set_active ничего не писать - тоже ошибка? (т.е. первый db_set_active и сразу второй db_set_active)

Аватар пользователя gorr gorr 6 ноября 2010 в 20:46

На официальном сайте советовали возвращать исходное соединение не командой db_set_active('default');, а командой db_set_active('');
Попробуйте.

Аватар пользователя edhel edhel 7 ноября 2010 в 5:11

ёлки, ну вставьте print-ы до, после и между db_set_active, чтобы понять в каком именно вызове ошибка происходит, потом в сами db_set_active вставляйте print-ы, чтобы понять в каком месте ошибка

Аватар пользователя Sun-fire Sun-fire 7 ноября 2010 в 14:49

Кажись нашел причину трабла.

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

Буду уточнять у моего хостера вопрос по пермишенам мускуль-пользователя. По результатам отпишусь.

Возможное решение трабла нашел, когда вкурил форум: http://www.php.su/forum/topic.php?forum=28&topic=175

Аватар пользователя Sun-fire Sun-fire 8 ноября 2010 в 20:06

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

Выходов было два: или менять права доступа пользователя, или хостить сайт вместе с тем сайтом, куда я удаленно пробовал коннектится. По желанию заказчика был выбран второй вариант. Как говорится, если гора не идет к Магомету...

В результате все работает как надо. Базы переключаются, запросы работают.

Всем отписавшимся - спасибо за помощь.