Общие модули при мультисайтинге [РЕШЕНО]

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

Аватар пользователя Atl Atl 14 августа 2009 в 0:15

Сделал мультисайт, но не могу никак найти куда кидать общие модули.
Написано, что сюда: sites/all/modules
Все перепробовал, куда только не тыкал. И с очисткой кэша, и с update.php и проч.
Такая же ерунда с темами.

Думаю может с общими таблицами что-то не так.

Второй сайт в связке следующий:
$db_url = 'mysqli://юзер:парольlocalhost/сайт2';
$db_prefix = array(
'default' => 'сайт2.',
'authmap' => 'сайт1.',
'profile_fields' => 'сайт1.',
'profile_values' => 'сайт1.',
'role' => 'сайт1.',
'sessions' => 'сайт1.',
'users' => 'сайт1.',
'watchdog' => 'сайт1.',
);

Кто подскажет как сделать модули общими? С локальными все в норме.

Комментарии

Аватар пользователя yugin yugin 14 августа 2009 в 6:16

все верно. общие модули сюда sites/all/modules, общие темы сюда sites/all/themes
уже не один сайт на мультисайтинге делал. ищите ошибку.

settings.php правильно настроен?

Аватар пользователя bohart@drupal.org bohart@drupal.org 14 августа 2009 в 10:48

для мульсайтинга использую модуль domain
разворачиваем один сайт, все другие делаем в панели управления хостингом алиасами.
как уже писалось общие модули ложем в sites/all/modules, общие темы - в sites/all/themes
ни разу ещё проблем не было Smile

Аватар пользователя Atl Atl 15 августа 2009 в 14:01

settings.php - стандартный, без изменений.
Пробую пока на локалке.
Я так понимаю, что тема sites/all/themes должна быть видна и в подсайтах.

Аватар пользователя Atl Atl 16 августа 2009 в 12:17

Вот пишет: "Domain access failed to load during phase: -1. Please check your settings.php file and site configuration."
Где копать? Что проверять в settings.php и конфигурации сайта?

Аватар пользователя yugin yugin 17 августа 2009 в 5:41

"Atl" wrote:
Где копать? Что проверять в settings.php и конфигурации сайта?

Есть там такой параметр как base_url - при мультисайтинге его обязательно нужно указывать. По умолчанию он закомментирован. Нужно раскомментировать и указать правильный путь. Только делается это не в основном settings.php, а в тех, которые отвечают за свой сайт. На каждом сайте мультисайтинга - свой settings.php со своим base_url.

Аватар пользователя Atl Atl 20 августа 2009 в 20:22

Всем спасибо!
Не помогло. Что только не пробовал. И на разных сайтах. И базовый добавлял на подсайт и строку:
include './sites/all/modules/domain/settings.inc';

Глухо!
Хоть опять на 5-ку возвращайся. На ней все работает без проблем.

Может кто описалово толковое со скринами сделает?

Аватар пользователя yugin yugin 21 августа 2009 в 7:05

Я б на вашем месте несколько раз подумал о возврате на 5-ку. У всех все работает, и общие модули и темы. Что-то у вас не так, где-то ошибка. Распишите пошагово все, что делаете, куда кладете и что где прописываете. Иначе нет никакого представления о том, где искать. Из опыта знаю, что подобная проблема может быть из-за одного мелкого недосмотра.

И еще - рекомендую пройти весь путь сначала: делаем новую установку Друпала для основного сайта, потом в отдельную базу (!) инсталлируем еще одну копию (или просто копирум эту базу), потом делаем все установки для мультисайтинга (для мультисайтов на поддоменах я все делал на хостинге, т.к. на домене все завязано).
Когда пошагово все распишете, вполе невоятно, что сами ошибку и найдете.

Аватар пользователя yugin yugin 21 августа 2009 в 7:14

"Atl" wrote:
settings.php - стандартный, без изменений.
Пробую пока на локалке.
Я так понимаю, что тема sites/all/themes должна быть видна и в подсайтах.

вот тут скорее всего и проблема. первое - settings.php не должен быть стандартным у подсайтов. У каждого должен быть прописан base_url (нужно раскомментировать строчку и вписать правильный). Далее, делать мультисайт на локале на мой взгляд, не совсем верно. Делайте сразу на хостинге, так сказать в реальных условиях.

Когда-то я тоже много времени потратил на понимание работы мультисайтинга. Так что пробуйте и пишите о результатах. И снимите ваше [НЕ РЕШАЕМО].

Аватар пользователя Atl Atl 22 августа 2009 в 14:55

Пишу о результатах.
Работаю на хостинге.
------------------------------
Смысл всего:
1. Сделать доступными общие модули и общие темы доступными для подсайтов, чтобы исключить необходимость обновления каждый раз модулей (общих, если дублируется при неопознавании общих модулей и общих тем) на всех подсайтах. На подсайтах иметь только те модули, кот. локально-функционально пользует только соответств. подсайт.
2. Включить модули группы domain.
------------------------------

1.Сделал бэкап главной.

2.Создал подсайт (новая база, юзер, пароль; добавление юзера №1 гл.сайта в базу подсайта, и т.д.):
Второй сайт в связке следующий:
$db_url = 'mysqli://юзер:парольlocalhost/сайт2';
$db_prefix = array(
'default' => 'сайт2.',
'authmap' => 'сайт1.',
'profile_fields' => 'сайт1.',
'profile_values' => 'сайт1.',
'role' => 'сайт1.',
'sessions' => 'сайт1.',
'users' => 'сайт1.',
'watchdog' => 'сайт1.',
);

Общие модули: sites/all/modules
Общие темы: sites/all/themes
Сделал импорт базы главного сайта.

3. Зашел на settings.php подсайта и раскомментировал и установил главный урл:
$base_url = 'http://www.сайт1.ru';
Запуск update.php.
Идет перенаправление на гл.сайт. Чищу кэши и т.д.
Ничего не меняется.
Меняю $base_url = 'http://www.сайт1.ru';
на
$base_url = 'http://www.сайт1.ru/sites/сайт2';
Запускаю update.php
Пошло!
Проверяю сайт2: меняю название подсайта, включаю блок "Сейчас на сайте".
Смотрю:
- Название поменялось;
- в "Сейчас на сайте" 2 юзера (admin, admin)[наверно таблицу юзеров из базы подсайта надо удалисть чтобы исключить дублирование; но это потом как-нибудь];
- Общие модули и общие темы - пусто.

Указано (Reamde для Domain), что domain нужно включать после выполнения предварительных действий.

Что делать дальше?
- Что писать в $base_url подсайта:
$base_url = 'http://www.сайт1.ru';
или
$base_url = 'http://www.сайт1.ru/sites/сайт2';

Аватар пользователя Atl Atl 22 августа 2009 в 16:43

Ну что? Так никто и не поможет?

Уже вторую неделю занимаюсь мазохизмом с общими модулями и общими темами!

Аватар пользователя WiseMan WiseMan 22 августа 2009 в 17:30

Модуль domain работает "в обход" стандартного мультисайтинга! Сайты в нем добавляются средствами модуля, а не через http://www.сайт1.ru/sites/сайт2.

Другими словами у вас должен быть только дефолтовый сайт http://www.сайт.ru/sites/default Все остальные сайты будут распознаваться средствами модуля. Если вам требуется использование разных таблиц в сочетании с модулем domain, то есть соответствующий суб-модуль, который позволяет создавать префиксы к таблицам.

А сочетать domain и стандартный мультисайтинг это задача не из простых, надо понимать и модуль, и мультисатинг drupal-а

Аватар пользователя Atl Atl 22 августа 2009 в 20:17

Модуль Domain еще не включал. Пытаюсь без него сделать мультисайтинг. И так чтобы общие модули и общие темы были видны в подсайте.

http://www.сайт1.ru/sites/сайт2 включаю, т.к. требуется в settings.php подсайта указывать базовый сайт.
Это что, nребуется указывать только при использовании Domain? При обычном способе не надо?

Аватар пользователя WiseMan WiseMan 22 августа 2009 в 20:29

Тогда попробуйте следующее:
убрать все модули из общей папки sites/all/modules (чтобы папка была пустой) и разложить в папки сайтов sites/сайт2/modules . Сделайте это уже после установки и затем посмотрите будут ли видны модули в админках сайтов. В настройках сайтов, типа $base_url ничего менять не надо. Если модули не будут видны, то скорее всего дело в правах доступа на папку с модулями.

Или сразу попробуйте менять права доступа на папку с модулями и смотрите появится ли они в админке.

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

Вы, кстати, в базу данных в таблицу "системс" у каждого из сайтов за глядывали? там список модулей определяется?

Аватар пользователя Atl Atl 22 августа 2009 в 21:16

1. В папках system обоих (гл.сайта и подсайта) все видно - видны и общие модули и общие темы. Идентичны!
2. Права поменял на 777. Стояли 755.
После каждого из обоих пунктом кэш (производительность > очистка) cron, update.php, проверка видимости общих модулей и общих таблиц.

Пробую перекинуть модули в подсайт.

Аватар пользователя yugin yugin 23 августа 2009 в 19:22

"Atl" wrote:
3. Зашел на settings.php подсайта и раскомментировал и установил главный урл:
$base_url = 'http://www.сайт1.ru';

Сайт 2 - это подсайт? Тогда зачем базовый урл сайт1 пишете?

"Atl" wrote:
Меняю $base_url = 'http://www.сайт1.ru';
на
$base_url = 'http://www.сайт1.ru/sites/сайт2';

Если у вас сайт2 в подкаталоге, то почему урл вида http://www.сайт1.ru/sites/сайт2 ? Если это урл сайта, по которому он доступен будет, то должен быть вида http://www.сайт1.ru/сайт2

Расскажу как я делал пошагово. Без всяких модулей Domain.

1. Имеем готовый основной сайт, с доменом www.domain.com
2. Инсталлируем локально новую копию Друпала с нужными нам модулями.
3. В панели хостинга создаем поддомен вида sub.domain.com (у меня мультисайтинг на поддомене) и делаем так, чтобы он указывал на основной домен, а не на папку на сервере. На каждом хостинге по разному делается. Мне пришлось делать симлинком.
4. Делаем бэкап нового сайта с локала и заливаем в предварительно созданную БД на хостинг (у меня без общих таблиц)
5. На сервере в папке sites создаем папку для нового подсайта вида sub.domain.com
6. В эту папку кладем .htaccess, settings.php, создаем папки modules и themes
7. Кладем в эти папки те модули и темы, которые у нас будут использоваться только на этом сайте
8. Прописываем $base_url в settings.php как $base_url = 'http://sub.domain.com '; - прописываем это не в основном файле настроек, только в файле для подсайта.

Все. Должно все заработать.

Для начала посмотрите на $base_url и укажите его правильно. Судя по тому, что вы написали, он сейчас указан неверно.

Если не получится, попробуйте пройти по моему пути. Если все получится, будете дальше делать нужные таблицы общими. В вашем случае можно инсталлировать в ту же базу, но делать таблицы с префиксами. Потом проверьте на видимость модулей и дальше переходите к объединению таблиц.

Как я вижу, у вас мультисайтинг не на поддоменах, а второй сайт находится в подпапке. Но раз не получается сделать сразу в подпапку, я б рекомендовал сначала сделать на поддомене, а потом переносить в подкаталог. С точки зрения системы - это индивидуальный сайт, и все дело в настройках и именах. Любой независимый сайт на Друпале можно сделать подсайтом другого на Друпале (как в поддомен так и в подкаталог), главное чтобы версии совпадали. В общем-то как и вынести подсайт на отдельный домен.

Аватар пользователя Atl Atl 30 августа 2009 в 22:38

"yugin" wrote:
5. На сервере в папке sites создаем папку для нового подсайта вида sub.domain.com
6. В эту папку кладем .htaccess, settings.php, создаем папки modules и themes
7. Кладем в эти папки те модули и темы, которые у нас будут использоваться только на этом сайте

Сделал все как описано. По всем пунктам. Пунктуально.
В 6-м в sub.domain.com я создал целый стандартный сайт со всеми каталогами.
settings.php получился в sub.domain.com/sites/default/settings.php
Полный список по путям следующий:
/domain.com/sites/all/modules
/domain.com/sites/all/themes
/domain.com/sites/sub.domain.com/(папки от includes до themes, и файлы от install.php до xmlrpc.php)
Сайт нормально показывается при наборе sub.domain.com, но когда захожу в модули или темы, то не вижу ни модулей (доп.уст.в осн.сайте domain.com), ни тем.
Общие таблицы пока не создавал. Отдельные сайты со своими базами.
=====================================
Что-то не понятно. Разве в sub.domain.com мы кидаем settings.php и создаем модули и темы? sub.domain.com - целый сайт и settings.php в sites/default/, а модули и темы сами создаются в стандартной установке.

Аватар пользователя WiseMan WiseMan 30 августа 2009 в 22:43

"Atl" wrote:
/domain.com/sites/sub.domain.com/(папки от includes до themes, и файлы от install.php до xmlrpc.php)

Вот это как понимать?
Все файлы движка должны быть в корне domain.com в данном случае. А внутри sub.domain.com только файл settings.php болльше ничего. Если, конечно, индивидуальных модулей и тем для сайта не предвидится.
"Atl" wrote:
Что-то не понятно. Разве в sub.domain.com мы кидаем settings.php и создаем модули и темы?

Именно так - только settings.php, а папки модулей и для тем только при необходимости.

"Atl" wrote:
sub.domain.com - целый сайт и settings.php в sites/default/, а модули и темы сами создаются в стандартной установке.

settings.php в sites/default работает для всех сайтов кроме sub.domain.com Smile , а если уж есть папка sub.domain.com в /domain.com/sites, то там должен быть свой settings.php

Аватар пользователя Atl Atl 31 августа 2009 в 0:25

М-д-а-а-а-а!
Если это так, то сколько лишней работы убирается.
Я как-то давно попробовал этот способ и когда не пошло стал делать полную установку всех папок для подсайта.
Короче, пробую.
...
Все получилось!
Не совсем так, как написано.
Но...!
На то и бестолковка, чтоб ею пользоваться.
Отдышусь - напишу.

Аватар пользователя yugin yugin 31 августа 2009 в 5:30

"Atl" wrote:
Все получилось!
Не совсем так, как написано.

А что, собсна, не совсем так? Расскажите публике, чтоб знать.

Аватар пользователя Atl Atl 31 августа 2009 в 10:53

Главные моменты:
1. В сPanel поддомен sub.domain.com ссылается на каталог осн.момента - /public_html/domain.com
2. Settings.php подсайта в domain.com/sites/sub.domain.com
3. В settings.php базовый урл:
$base_url = 'http://www.sub.domain.com';
4. В sub.domain.com:
- пришлось кинуть все папки станд. установки (в modules все стандартные модули, т.к. не ставился и выдавал ошибку menu и system в includes).
- 2 файла: settings.php и .htaccess

Т.о. основное отличие от предлагаемого в том, что в папку sites/sub.domain.com пришлось кидать все станд.папки станд.установки.
======================
Сделал общие таблицы ('authmap', 'profile_fields', 'profile_values', 'role', 'sessions', 'users', 'watchdog'), как указано в начале топа.
Удалил в базе подсайта таблицы, которые берутся из осн.сайта.
В блоке "Сейчас на сайте" при заходе в осн.сайт, затем подсайт показываются два одинаковых юзера. Чистану, update'ну и т.д. может исчезнут.

Аватар пользователя WiseMan WiseMan 31 августа 2009 в 10:53

"Atl" wrote:
Т.о. основное отличие от предлагаемого в том, что в папку sites/sub.domain.com пришлось кидать все станд.папки станд.установки.

Вы изобретаете велосипед - отсюда все проблемы.

Аватар пользователя Atl Atl 31 августа 2009 в 11:27

А что делать, если выдавал ошибку?

Попробую удалить все и оставить в sites/sub.domain.com только settings.php и .htaccess.
Получаю:
Fatal error: Call to undefined function user_access() in /.../public_html/domain.com/includes/menu.inc on line 449

Ставлю все папки кроме modules - ошибка.
Ставлю полный комплект - нормально.
Оставляю только modules (удаляю includes, misc, profiles, scripts) - нормально.

Возможно это оттого, что установив сайт в осн.домене, был сделан бэкап и перенос его в подсайт.
Тут рекомендовалось на локали. Затем с локали в осн., и далее, в подсайт.

Сейчас все работает. Лишних несколько (1.853) мегов не проблема.

Аватар пользователя yugin yugin 31 августа 2009 в 11:30

"Atl" wrote:
В сPanel поддомен sub.domain.com ссылается на каталог осн.момента - /public_html/domain.com

Вы натолкнули меня на одну мысль, которую я тут не расписывал, так как не знал, что у вас хостинг с Cpanel. Одна из фишек мультисайтинга на Друпале в том, что поддомен должен иметь перенаправление на основной домен, а дальше Друпал сам разберется что и кому отдавать. Так вот, на моем хостинге с этой панелью при создании поддомена создается папка с именем sub. И перенаправление панель делает путем создания в этой папке файла .htaccess с соответствующими настройками. Такой метод у меня не работал. И решение было найдено - симлинк. Если у вас все точно также, то делаем следующее: создаем субдомен как и положено, потом удаляем папку, созданную панелью для субдомена.
Делаем файл php со следующим содержанием и именем, скажем symlink:

<?php
symlink
'/home/myrootfoldername/public_html/''sub' );
?>

Некоторые пояснения:
/home/myrootfoldername/public_html/ - нужно сменить на нужный путь. sub - имя поддомена для sub.domain.com Нужно точно узнать у провайдера абсолютный путь, т.к. папка home может быть к примеру home5

Кладем файл в корень сервера где все папки лежат. Далее набираем в браузере www.domain.com/symlink.php, жмем ввод и видим белый экран. Симлинк создан. В панели редиректов не делал, само сразу заработало.

"Atl" wrote:
4. В sub.domain.com:
- пришлось кинуть все папки станд. установки (в modules все стандартные модули, т.к. не ставился и выдавал ошибку menu и system в includes).

Вот этого тоже не надо, только настройки, хтаксесс и папки для модулей и тем.

Аватар пользователя Atl Atl 22 сентября 2009 в 14:56

Ларчик открывался просто.
При закидывании settings.php и .htaccess (без modules и themes) нужно запускать install.php.
Import из готовой базы, расположенной на локалке делать не стОит. Если сделать так (импортируя бэкап с локали), то подсайт ищет близко расположенные модули и темы, не затрагивая осн.сайт. Если их нет, то выдает ошибку.

Аватар пользователя yugin yugin 22 сентября 2009 в 16:20

"Atl" wrote:
Ларчик открывался просто.
При закидывании settings.php и .htaccess (без modules и themes) нужно запускать install.php.
Import из готовой базы, расположенной на локалке делать не стОит. Если сделать так (импортируя бэкап с локали), то подсайт ищет близко расположенные модули и темы, не затрагивая осн.сайт. Если их нет, то выдает ошибку.

Что ж, раз решение найдено - это хорошо. И тем не менее странно как-то. Все подсайты всегда из сделанного на локале импортировал sypexом.

Аватар пользователя Atl Atl 23 сентября 2009 в 10:05

Quote:
И тем не менее странно как-то. Все подсайты всегда из сделанного на локале импортировал sypexом.

Ха! Я понял в чем собака закопана! В начале появления 6-ки описывался процесс создания мультисайтинга (http://drupal.org/node/291373).
Там предлагалось бэкапить установленную на хостинге базу осн.сайта и разбэкапливать в подсайты.
Думаю, что надо устанавливать на локали (здесь уже предлагалось). И разбэкапливать на подсайты из нее.
Если разбэкапливать базу осн.сайта уст.на хостинге идет ругань подсайта на отсутствие станд.модулей.
Надо попробовать.

Очевидно следующее:
1. При обновлении модулей и тем достаточно обновить только находящиеся на осн.сайте и индивидуальные на подсайтах.
Т.о. убирается много лишней работы, которая имела бы место при установке на каждом индивидуально.
2. Возможно надо будет сделать настройку одного из подсайтов, забэкапить и распространить на другие. Чтобы не делать типовые настройки (меню, переводы, темы и проч.) индивидуально для каждого.

Буду рыть дальше!

На повестке дня:
1. При заходе на осн.сайт и подсайты (при общих таблицах пользователей в осн.базе) в блоке "Сейчас на сайте" показываются дублирующие пользователи, т.е. дважды (по количеству заходов), например, юзер админ и т.д.
2. Расковырять модуль domain, subdomain, Shared Sign-On, и т.д. что связано с мультисайтингом.

Ход "брожения по мукам" буду выкладывать здесь.

Аватар пользователя Atl Atl 16 октября 2009 в 21:06

Поставил модуль Domain и т.д.
Запускаю.
Получаю:
* Domain access failed to load during phase: -1. Please check your settings.php file and site configuration.
* Domain access failed to load during phase: -1. Please check your settings.php file and site configuration.
* user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND realm = 'domain_id')) AND grant_view >= 1' at line 1 query: SELECT COUNT(*) FROM node_access WHERE nid = 0 AND ((gid = 0 AND realm = 'all') OR (gid = AND realm = 'domain_id')) AND grant_view >= 1 in /home/ИмяДомена/public_html/ОснСайт/modules/node/node.module on line 2161.

Блин! Чтобы это значило?