Мультисайтинг не берет таблиц из другой базы

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

Аватар пользователя Shizuku Shizuku 30 декабря 2013 в 10:21

Не получается подключить ведомый сайт по схеме мультисайтинга. Вот мой settings.php для него:

$db_url = 'mysql://user:passwd@localhost/slave_bd';
$db_prefix = array(
'default' => 'slave_bd.',
'ulogin_identity' => 'master_bd.',
'users' => 'master_bd.',
'sequences' => 'master_bd.',
'sessions' => 'master_bd.',
'authmap' => 'master_bd.',
'sequences' => 'master_bd.',
'profile' => 'master_bd.',
'profile_type' => 'master_bd.',
);
$cookie_domain = '.site.by';

Когда заходишь на slave.site.by редиректит на http://slave.site.by/install.php, после чего обнаруживает, что сайт уже существует "Drupal already installed" и предлагает обновить. Если согласиться, то перекидывает на http://slave.site.by/upgrade.php с ошибкой:

PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'slave_bd.system' doesn't exist: SELECT name, schema_version FROM {system} WHERE type = :type; Array ( [:type] => module ) in drupal_get_installed_schema_version() (line 155 of /home/site/public_html/includes/install.inc).

Комментарии

Аватар пользователя Murdok Murdok 30 декабря 2013 в 11:01

У вас в БД таблицы без префиксов? Рекомендую все таки использовать префиксы.
Тогда настройки для ведомого сайта будут такими:

<?php
$databases 
= array (
  
'default' =>
  array (
    
'default' =>
    array (
      
'database' => 'slave_db',
      
'username' => 'all_db',
      
'password' => 'pass',
      
'host' => 'localhost',
      
'port' => '',
      
'driver' => 'mysql',
      
'prefix' => array(
            
'default'   => 'slaveprefix_',
            
'users'     => 'main_db.mainprefix_',
            
'users_roles'     => 'main_db.mainprefix_',
            
'role_permission'     => 'main_db.mainprefix_',
            
'flood'     => 'main_db.mainprefix_',
            
'sessions'  => 'main_db.mainprefix_',
            
'role'      => 'main_db.mainprefix_',
            
'authmap'   => 'main_db.mainprefix_',
            
'filter'     => 'main_db.mainprefix_',
            
'filter_format'     => 'main_db.mainprefix_',
            
'locales_source'  => 'main_db.mainprefix_',
            
'locales_target'     => 'main_db.mainprefix_',
      ),
    ),
  ),
);
?>
Аватар пользователя Murdok Murdok 30 декабря 2013 в 11:18

Мультисайтинг ставил давно, но насколько я помню, сначала устанавливается ведомый сайт и только потом правится его settings.php.

Уточняю на всякий случай. Smile

Аватар пользователя Shizuku Shizuku 30 декабря 2013 в 11:31

"Murdok" wrote:
У вас в БД таблицы без префиксов?

Без префиксов. Они же по разным БД, так что по идее и так сойдет.
Ведомый не устанавливал, сдампил на него таблицы с основного за минусом общих таблиц.

Аватар пользователя Shizuku Shizuku 30 декабря 2013 в 11:55

"Murdok" wrote:
рекомендую изучить

Изучал...
У меня только в sites/default нету settings.php. Я перенес основной сайт из default в отдельную папку, sites/mysite по принципу дочерних.
Как-то так работало, settings.php лежал непосредственно в директории sites/mysite

Аватар пользователя Shizuku Shizuku 30 декабря 2013 в 13:16

Я поудалял файлы конфигурации отовсюду, положил в корень install.php из дистрибутива, и установил drupal с минимальным профилем в базу slave_db. После этого восстановил settings.php как и было - на свои места.

Теперь я могу заходить/выходить с любого сайта в связке! Ура ))
И могу вешать отдельные темы/шаблоны при этом.

Но при существующей схеме ведомый сайт берет таблицы из основного. А изначально планировалось, что я выкину общие таблицы из обоих баз - в третью, common_db. Попробовал переписать settings.php - сразу же пошли старые ошибки... Даже установка в common_db по принципу схемы на две базы - не помогла.

Еще я хоть тресни - не вижу в базе slave_bd никаких таблиц. Вааааще. Хотя по логике там сейчас должен быть полный комплект, ведь я после установки в эту базу ничего не чистил - только settings поменял, чтобы общие из master_db брались... Мистика. Или больно уж хитрый кэш у хостера.