Решение
Проблема возникает, если устанавливать второй сайт по схеме мультисайта с общими таблицами в D6 и D7. Инсталлятор выдает ошибку, когда доходит до общих таблиц.
Варианты решений
- Установка мультисайтинга в общими таблицами в Drupal 6 и 7
- Установка мультисайтинга в общими таблицами в Drupal 5
Установка мультисайтинга в общими таблицами в Drupal 6 и 7
Первый сайт
- указать строку с данными для подключения к базе данных
- указать префиксы таблиц перед установкой
- установить drupal как обычно
Все последующие сайты
- указать строку с данными для подключения к базе данных
- НЕ указывать префиксы таблиц перед установкой
- установить без префиксов таблиц
- установить префиксы таблиц после установки
- удалить таблицы, которые делаются общими.
Шаблон sql-запроса для удаления таблиц (удалите из кода таблицы, которые вы хотите оставить в базе):
DROP TABLE `term_data`,
`term_hierarchy`,
`term_relation`,
`term_synonym`,
`vocabulary`,
`vocabulary_node_types`,
`aggregator_category`,
`aggregator_category_feed`,
`aggregator_category_item`,
`aggregator_feed`,
`aggregator_item`,
`book`,
`comments`,
`contact`,
`file_revisions`,
`files`,
`files_backup`,
`files_tmp`,
`forum`,
`history`,
`locales_meta`,
`locales_source`,
`locales_target`,
`node`,
`node_accesaggregator_category`,
`node_access`,
`node_comment_statistics`,
`node_counter`,
`node_revisions`,
`node_type`,
`old_revisions`,
`poll`,
`poll_choices`,
`poll_votes`,
`search_dataset`,
`search_index`,
`search_total`,
`term_node`,
`url_alias`,
`access`,
`authmap`,
`profile_fields`,
`profile_values`,
`sessions`,
`users`,
`filter_formats`,
`filters`,
`permission`,
`role`,
`users_roles`;
Для Drupal 5 также может потребоваться (в Drupal 6 такой таблицы нет):
DROP TABLE `sequences`;
Если удалите лишние таблицы - придется начинать с шага 2
Установка мультисайтинга в общими таблицами в Drupal 5
В drupal 5 следующих шагов достаточно для всех установок:
- указать строку с данными для подключения к базе данных
- указать префиксы таблиц перед установкой
- установить drupal как обычно, игнорируя предупреждения о том, что таблицы уже существуют
Использованные материалы
[multisite] Fatal error when installing shared table sites.
Полезные ссылки
Multi-site with single codebase, different content databases, shared user database, shared sign-on
Проблемы мультисайтинга
http://drupal.org/node/209862
http://drupal.org/node/329141
Bookmark/Search this post with











Комментарии
Спасибо, хорошая информация.
Есть вопрос:
пытаюсь установить мультисайтинг на Денвер (друпал 6.6), все делаю по инструкции с drupal.ru и drupal.org, и не получается.
инсталируется основной сайт и один дополнительный. при попытке инсталирования третьего сайта:
Денвер выбрасывает в окно с ошибкой CGI-скриптов.
в файл: \home\основной.сайт\www\.htaccess добавляю:
#dnwr_host 1-дополнительный.сайт
#dnwr_host 2-дополнительный.сайт
при этом инсталируется только дополнительный.сайт определенный последним.
что я делаю не так?
Возможно надо прописать алиасы для апачи, но я не пойму как это сделать в Денвере
Multi-site on Windows: http://drupal.org/node/288126
Это я тоже читал. там пример для WampServer
Денвер - это набор WAMP (Windows+Apacje+MySQL+PHP).
Спасибо за решение.
Может кто подскажет, поможет мне ответить на вопрос: "В какой таблице содержится информация о теме сайта". Т.е. установил мультисайтинг, но дизайн на всех сайтах одинаковый, вида: xxxxx.sitename.ru, yyyyy.sitename.ru
Как установить разный дизайн на разных сайтах, при этом использовать единую БД для юзверей и т.п.
Во-первых, тему можно прописать в settings.php - посмотрите там комментарии.
Во-вторых, изменение темы в базе будет менять её на всех остальных сайтах, если используются общие таблицы. В основном настройки сайта хранятся в таблице system.
Тема, то поменяется, а как же тогда посты будут рассылаться тоже на все сайты?
Я сделал пока так:
Имеется 6 сайтов (site[2..6].masterdomain.ru), на первом сайте друпала нет.
Необходимо иметь единую БД по конфигурации (модули,юзверы и т.п.), но иметь разные структуры, содержание и оформление.
Закачал на все сайты drupal.
Создал локально для каждого сайта settings.php
Открыл URL Site2 Начал процесс установки.
Копировал settings.php (для сайта2)
* Даже и не обязательно ставить права 755 или 777
* Все настройки автоматически принялись и Drupal установился.
Забил информацию о сайте2 (пароли,мыло и т.п.)
Log out
Открыл URL Site3
Начал установку
Копирование settings.php (для сайта3)
Забил информацию о сайте3
При этом важно отметить, что обязательно надо убирать:
$db_prefix и не совсем обязательно,но поставил $cookie_domain.
Он даст один раз залогиниться на masterdomain, и на всех остальных subdomains не логиниться.
т.е. я указал masterdomain.ru и получил следующий вид:
$db_prefix = array(
'default' => 'site3_',
'authmap' => 'dp_',
'sessions' => 'dp_',
'sequences' => 'dp_',
'users' => 'dp_',
'role' => 'dp_',
'users_roles' => 'dp_',
'profile_fields' => 'dp_',
'profile_values' => 'dp_',
);
$db_url = 'mysqli://userSQL:passwordSQL@serverSQL_Number[2..6]/DB_SQL';
Таким образом у меня получается, что для каждого сайта свои таблицы, кроме перечисленных по dp_ (общие таблицы).
Для создания единых правил по доступу, надо добавить еще таблицу access,
пришлось во все settings.php добавлять строку access => site2_
Насколько я понял вы хотите иметь общих пользователей на разных сайтах.
Мультисайтинг позволяет вам держать 1 версию кода Drupal, что снижает затраты на поддержку и обновления.
Сайты в мультисайтинге могут хранить свои данные в разных базах, в одной базе или в нескольких базах разные таблицы.
Мне кажется, что вы не используете весь потенциал мультисайтинга - у вас много копий кода друпала...
Влад можно по-подробней на этом месте... Конечно лучше держать одно ядро Drupal, как это можно реализовать. В данной статье я вижу, что на каждый отдельный сайт ставится Drupal!? Встречал инфу, что можно на мастерсайте в директории sites, создавать поддиректории для остальных сайтов и в settings.php указывать отдельные параметры. Но здесь мне не ясно, как при открывании урла н-р: сайт2, будет открываться мастерсайт? Нужно сделать пустую страницу, а лучше .htaccess для редиректа на мастерсайт, так что-ли?
Как-то немого кривовато получается... Или я не правильно думаю?! ;)
Про мультисайтинг много написано на drupal.ru.
Кроме того: http://tinyurl.com/mrydb7
У меня такой вопрос. Установил мультисайтинг на несколько баз данных, все нормально работает, только есть такой нюанс, что когда на дополнительном сайте происходит авторизация пользователя и после этого он переходит на главный сайт, то надо повторно авторизовываться. Так и должно быть? Или где-то допустил ошибку?
При авторизации на главном сайте и при переходе на дополнительный, все работает нормально..
Мультисайтинг не подразумевает общих пользователей и общую аутентификацию (общий логин). То есть по умолчанию так не получается. Единственное исключение - использование поддоменов, потому что тогда (при правильной настройке в settings.php) cookies основного домена могут быть прочитаны поддоменами и сессия будет сохраняться.
Но опять же по умолчанию эта возможность не используется.
У меня и сделано на поддоменах. А что нужно сделать в settings.php ? $cookie_domain - у меня указывают на главный сайт, нужно что-то еще?
Cookies доступны только для домена, который их выдал. Поддомены - это отдельные домены. Вам нужно сделать так, чтобы cookies, которые поставил главный домен могли быть прочитаны поддоменами.
А как это сделать?
Погуглить.
Да я уже две недели гуглю и drupal.ru опрашиваю, никак информацию найти не могу. Думал вы знаете и подскажете...
http://tinyurl.com/ycp4t2n - эту точку нужно ставить в settings.php. Только я вам этого не говорил. Тссс!