Сделал мультисайт, но не могу никак найти куда кидать общие модули.
Написано, что сюда: 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.',
);
Кто подскажет как сделать модули общими? С локальными все в норме.
Комментарии
все верно. общие модули сюда sites/all/modules, общие темы сюда sites/all/themes
уже не один сайт на мультисайтинге делал. ищите ошибку.
settings.php правильно настроен?
для мульсайтинга использую модуль domain
разворачиваем один сайт, все другие делаем в панели управления хостингом алиасами.
как уже писалось общие модули ложем в sites/all/modules, общие темы - в sites/all/themes
ни разу ещё проблем не было
settings.php - стандартный, без изменений.
Пробую пока на локалке.
Я так понимаю, что тема sites/all/themes должна быть видна и в подсайтах.
Вот пишет: "Domain access failed to load during phase: -1. Please check your settings.php file and site configuration."
Где копать? Что проверять в settings.php и конфигурации сайта?
Есть там такой параметр как base_url - при мультисайтинге его обязательно нужно указывать. По умолчанию он закомментирован. Нужно раскомментировать и указать правильный путь. Только делается это не в основном settings.php, а в тех, которые отвечают за свой сайт. На каждом сайте мультисайтинга - свой settings.php со своим base_url.
Всем спасибо!
Не помогло. Что только не пробовал. И на разных сайтах. И базовый добавлял на подсайт и строку:
include './sites/all/modules/domain/settings.inc';
Глухо!
Хоть опять на 5-ку возвращайся. На ней все работает без проблем.
Может кто описалово толковое со скринами сделает?
Я б на вашем месте несколько раз подумал о возврате на 5-ку. У всех все работает, и общие модули и темы. Что-то у вас не так, где-то ошибка. Распишите пошагово все, что делаете, куда кладете и что где прописываете. Иначе нет никакого представления о том, где искать. Из опыта знаю, что подобная проблема может быть из-за одного мелкого недосмотра.
И еще - рекомендую пройти весь путь сначала: делаем новую установку Друпала для основного сайта, потом в отдельную базу (!) инсталлируем еще одну копию (или просто копирум эту базу), потом делаем все установки для мультисайтинга (для мультисайтов на поддоменах я все делал на хостинге, т.к. на домене все завязано).
Когда пошагово все распишете, вполе невоятно, что сами ошибку и найдете.
вот тут скорее всего и проблема. первое - settings.php не должен быть стандартным у подсайтов. У каждого должен быть прописан base_url (нужно раскомментировать строчку и вписать правильный). Далее, делать мультисайт на локале на мой взгляд, не совсем верно. Делайте сразу на хостинге, так сказать в реальных условиях.
Когда-то я тоже много времени потратил на понимание работы мультисайтинга. Так что пробуйте и пишите о результатах. И снимите ваше [НЕ РЕШАЕМО].
Пишу о результатах.
Работаю на хостинге.
------------------------------
Смысл всего:
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';
Ну что? Так никто и не поможет?
Уже вторую неделю занимаюсь мазохизмом с общими модулями и общими темами!
Модуль domain работает "в обход" стандартного мультисайтинга! Сайты в нем добавляются средствами модуля, а не через http://www.сайт1.ru/sites/сайт2.
Другими словами у вас должен быть только дефолтовый сайт http://www.сайт.ru/sites/default Все остальные сайты будут распознаваться средствами модуля. Если вам требуется использование разных таблиц в сочетании с модулем domain, то есть соответствующий суб-модуль, который позволяет создавать префиксы к таблицам.
А сочетать domain и стандартный мультисайтинг это задача не из простых, надо понимать и модуль, и мультисатинг drupal-а
Модуль Domain еще не включал. Пытаюсь без него сделать мультисайтинг. И так чтобы общие модули и общие темы были видны в подсайте.
http://www.сайт1.ru/sites/сайт2 включаю, т.к. требуется в settings.php подсайта указывать базовый сайт.
Это что, nребуется указывать только при использовании Domain? При обычном способе не надо?
Тогда попробуйте следующее:
убрать все модули из общей папки sites/all/modules (чтобы папка была пустой) и разложить в папки сайтов sites/сайт2/modules . Сделайте это уже после установки и затем посмотрите будут ли видны модули в админках сайтов. В настройках сайтов, типа $base_url ничего менять не надо. Если модули не будут видны, то скорее всего дело в правах доступа на папку с модулями.
Или сразу попробуйте менять права доступа на папку с модулями и смотрите появится ли они в админке.
И для диагноза проблемы желательно попробовать сделать мультисайтинг без общих таблиц. Если будет работать, то дело однозначно в таблицах.
Вы, кстати, в базу данных в таблицу "системс" у каждого из сайтов за глядывали? там список модулей определяется?
1. В папках system обоих (гл.сайта и подсайта) все видно - видны и общие модули и общие темы. Идентичны!
2. Права поменял на 777. Стояли 755.
После каждого из обоих пунктом кэш (производительность > очистка) cron, update.php, проверка видимости общих модулей и общих таблиц.
Пробую перекинуть модули в подсайт.
Сайт 2 - это подсайт? Тогда зачем базовый урл сайт1 пишете?
Если у вас сайт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 и укажите его правильно. Судя по тому, что вы написали, он сейчас указан неверно.
Если не получится, попробуйте пройти по моему пути. Если все получится, будете дальше делать нужные таблицы общими. В вашем случае можно инсталлировать в ту же базу, но делать таблицы с префиксами. Потом проверьте на видимость модулей и дальше переходите к объединению таблиц.
Как я вижу, у вас мультисайтинг не на поддоменах, а второй сайт находится в подпапке. Но раз не получается сделать сразу в подпапку, я б рекомендовал сначала сделать на поддомене, а потом переносить в подкаталог. С точки зрения системы - это индивидуальный сайт, и все дело в настройках и именах. Любой независимый сайт на Друпале можно сделать подсайтом другого на Друпале (как в поддомен так и в подкаталог), главное чтобы версии совпадали. В общем-то как и вынести подсайт на отдельный домен.
Сделал все как описано. По всем пунктам. Пунктуально.
В 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/, а модули и темы сами создаются в стандартной установке.
Вот это как понимать?
Все файлы движка должны быть в корне domain.com в данном случае. А внутри sub.domain.com только файл settings.php болльше ничего. Если, конечно, индивидуальных модулей и тем для сайта не предвидится.
Именно так - только settings.php, а папки модулей и для тем только при необходимости.
settings.php в sites/default работает для всех сайтов кроме sub.domain.com , а если уж есть папка sub.domain.com в /domain.com/sites, то там должен быть свой settings.php
М-д-а-а-а-а!
Если это так, то сколько лишней работы убирается.
Я как-то давно попробовал этот способ и когда не пошло стал делать полную установку всех папок для подсайта.
Короче, пробую.
...
Все получилось!
Не совсем так, как написано.
Но...!
На то и бестолковка, чтоб ею пользоваться.
Отдышусь - напишу.
Теперь, не дыша, начнем делать некоторые таблицы общими.
А что, собсна, не совсем так? Расскажите публике, чтоб знать.
Главные моменты:
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'ну и т.д. может исчезнут.
Вы изобретаете велосипед - отсюда все проблемы.
А что делать, если выдавал ошибку?
Попробую удалить все и оставить в 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) мегов не проблема.
Вы натолкнули меня на одну мысль, которую я тут не расписывал, так как не знал, что у вас хостинг с 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, жмем ввод и видим белый экран. Симлинк создан. В панели редиректов не делал, само сразу заработало.
Вот этого тоже не надо, только настройки, хтаксесс и папки для модулей и тем.
Ларчик открывался просто.
При закидывании settings.php и .htaccess (без modules и themes) нужно запускать install.php.
Import из готовой базы, расположенной на локалке делать не стОит. Если сделать так (импортируя бэкап с локали), то подсайт ищет близко расположенные модули и темы, не затрагивая осн.сайт. Если их нет, то выдает ошибку.
Что ж, раз решение найдено - это хорошо. И тем не менее странно как-то. Все подсайты всегда из сделанного на локале импортировал sypexом.
Ха! Я понял в чем собака закопана! В начале появления 6-ки описывался процесс создания мультисайтинга (http://drupal.org/node/291373).
Там предлагалось бэкапить установленную на хостинге базу осн.сайта и разбэкапливать в подсайты.
Думаю, что надо устанавливать на локали (здесь уже предлагалось). И разбэкапливать на подсайты из нее.
Если разбэкапливать базу осн.сайта уст.на хостинге идет ругань подсайта на отсутствие станд.модулей.
Надо попробовать.
Очевидно следующее:
1. При обновлении модулей и тем достаточно обновить только находящиеся на осн.сайте и индивидуальные на подсайтах.
Т.о. убирается много лишней работы, которая имела бы место при установке на каждом индивидуально.
2. Возможно надо будет сделать настройку одного из подсайтов, забэкапить и распространить на другие. Чтобы не делать типовые настройки (меню, переводы, темы и проч.) индивидуально для каждого.
Буду рыть дальше!
На повестке дня:
1. При заходе на осн.сайт и подсайты (при общих таблицах пользователей в осн.базе) в блоке "Сейчас на сайте" показываются дублирующие пользователи, т.е. дважды (по количеству заходов), например, юзер админ и т.д.
2. Расковырять модуль domain, subdomain, Shared Sign-On, и т.д. что связано с мультисайтингом.
Ход "брожения по мукам" буду выкладывать здесь.
Полностью согласен, только вот... : "зачем делать заново велосипед"
Поставил модуль 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.
Блин! Чтобы это значило?
Ну а решение описать?
а делать домены 3 уроня для обычных страниц как СИНОНИМЫ - через какой модуль можно?