Установка мультисайтинга с общими таблицами

16 Ноя 2008
Опубликовано VladSavitsky

Решение

Проблема возникает, если устанавливать второй сайт по схеме мультисайта с общими таблицами в D6 и D7. Инсталлятор выдает ошибку, когда доходит до общих таблиц.

Варианты решений

Установка мультисайтинга в общими таблицами в Drupal 6 и 7

Первый сайт

  1. указать строку с данными для подключения к базе данных
  2. указать префиксы таблиц перед установкой
  3. установить drupal как обычно

Все последующие сайты

  1. указать строку с данными для подключения к базе данных
  2. НЕ указывать префиксы таблиц перед установкой
  3. установить без префиксов таблиц
  4. установить префиксы таблиц после установки
  5. удалить таблицы, которые делаются общими.
    Шаблон 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 следующих шагов достаточно для всех установок:

  1. указать строку с данными для подключения к базе данных
  2. указать префиксы таблиц перед установкой
  3. установить 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

]]>]]>

Комментарии

Спасибо, хорошая информация.
Есть вопрос:
пытаюсь установить мультисайтинг на Денвер (друпал 6.6), все делаю по инструкции с drupal.ru и drupal.org, и не получается.
инсталируется основной сайт и один дополнительный. при попытке инсталирования третьего сайта:
Денвер выбрасывает в окно с ошибкой CGI-скриптов.

в файл: \home\основной.сайт\www\.htaccess добавляю:
#dnwr_host 1-дополнительный.сайт
#dnwr_host 2-дополнительный.сайт

при этом инсталируется только дополнительный.сайт определенный последним.

что я делаю не так?

Возможно надо прописать алиасы для апачи, но я не пойму как это сделать в Денвере

sergebw | Ноя 25th, 2008 в 12:54 после полудня

Multi-site on Windows: http://drupal.org/node/288126

VladSavitsky | Ноя 28th, 2008 в 3:51 после полудня

Это я тоже читал. там пример для WampServer

sergbw | Дек 1st, 2008 в 2:13 после полудня

Денвер - это набор WAMP (Windows+Apacje+MySQL+PHP).

VladSavitsky | Дек 1st, 2008 в 8:21 после полудня

Спасибо за решение.

Может кто подскажет, поможет мне ответить на вопрос: "В какой таблице содержится информация о теме сайта". Т.е. установил мультисайтинг, но дизайн на всех сайтах одинаковый, вида: xxxxx.sitename.ru, yyyyy.sitename.ru

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

ysamarin | Июл 9th, 2009 в 4:41 после полудня

Во-первых, тему можно прописать в settings.php - посмотрите там комментарии.
Во-вторых, изменение темы в базе будет менять её на всех остальных сайтах, если используются общие таблицы. В основном настройки сайта хранятся в таблице system.

VladSavitsky | Июл 9th, 2009 в 7:46 после полудня

Тема, то поменяется, а как же тогда посты будут рассылаться тоже на все сайты?

Я сделал пока так:

Имеется 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_ (общие таблицы).

ysamarin | Июл 9th, 2009 в 9:11 после полудня

Для создания единых правил по доступу, надо добавить еще таблицу access,
пришлось во все settings.php добавлять строку access => site2_

ysamarin | Июл 9th, 2009 в 10:11 после полудня

Насколько я понял вы хотите иметь общих пользователей на разных сайтах.
Мультисайтинг позволяет вам держать 1 версию кода Drupal, что снижает затраты на поддержку и обновления.
Сайты в мультисайтинге могут хранить свои данные в разных базах, в одной базе или в нескольких базах разные таблицы.
Мне кажется, что вы не используете весь потенциал мультисайтинга - у вас много копий кода друпала...

VladSavitsky | Июл 9th, 2009 в 10:20 после полудня

Влад можно по-подробней на этом месте... Конечно лучше держать одно ядро Drupal, как это можно реализовать. В данной статье я вижу, что на каждый отдельный сайт ставится Drupal!? Встречал инфу, что можно на мастерсайте в директории sites, создавать поддиректории для остальных сайтов и в settings.php указывать отдельные параметры. Но здесь мне не ясно, как при открывании урла н-р: сайт2, будет открываться мастерсайт? Нужно сделать пустую страницу, а лучше .htaccess для редиректа на мастерсайт, так что-ли?
Как-то немого кривовато получается... Или я не правильно думаю?! ;)

ysamarin | Июл 10th, 2009 в 7:44 после полудня

Про мультисайтинг много написано на drupal.ru.
Кроме того: http://tinyurl.com/mrydb7

VladSavitsky | Июл 10th, 2009 в 8:55 после полудня

У меня такой вопрос. Установил мультисайтинг на несколько баз данных, все нормально работает, только есть такой нюанс, что когда на дополнительном сайте происходит авторизация пользователя и после этого он переходит на главный сайт, то надо повторно авторизовываться. Так и должно быть? Или где-то допустил ошибку?

При авторизации на главном сайте и при переходе на дополнительный, все работает нормально..

Гость | Сен 24th, 2009 в 1:14 утра

Мультисайтинг не подразумевает общих пользователей и общую аутентификацию (общий логин). То есть по умолчанию так не получается. Единственное исключение - использование поддоменов, потому что тогда (при правильной настройке в settings.php) cookies основного домена могут быть прочитаны поддоменами и сессия будет сохраняться.
Но опять же по умолчанию эта возможность не используется.

VladSavitsky | Сен 24th, 2009 в 12:03 после полудня

У меня и сделано на поддоменах. А что нужно сделать в settings.php ? $cookie_domain - у меня указывают на главный сайт, нужно что-то еще?

Гость | Сен 24th, 2009 в 2:11 после полудня

Cookies доступны только для домена, который их выдал. Поддомены - это отдельные домены. Вам нужно сделать так, чтобы cookies, которые поставил главный домен могли быть прочитаны поддоменами.

VladSavitsky | Сен 25th, 2009 в 1:38 после полудня

А как это сделать?

Гость | Сен 25th, 2009 в 3:57 после полудня

Погуглить.

VladSavitsky | Сен 28th, 2009 в 3:07 после полудня

Да я уже две недели гуглю и drupal.ru опрашиваю, никак информацию найти не могу. Думал вы знаете и подскажете...

Гость | Сен 28th, 2009 в 4:34 после полудня

http://tinyurl.com/ycp4t2n - эту точку нужно ставить в settings.php. Только я вам этого не говорил. Тссс!

VladSavitsky | Сен 29th, 2009 в 3:04 после полудня
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>