Помогите разобраться в мультисайтинге на Drupal 6.14. Не могу понять на каком этапе у меня возникает ошибка
Мне необходимо создать два сайта с двумя базами данных. Домен и поддомен. Первый сайт главный, а второй использует таблицу пользователей с первого сайта.
1 сайт:
Имя сайта: system.ru
Логин: Администратор
Пароль: 123456789
База данных:
Имя: cl9055_system
Пароль :123456
2 сайт:
Имя сайта: poddomen.system.ru
Логин: Администратор
Пароль: 123456789
База данных:
Имя: cl9055_poddomen
Пароль :123456
___________________________________________
1. Распаковываю в папку «public_html» Drupal 6.14
2. Создаю файл “settings.php” system.ru/public_html/sites/default
3. Редактирую его следующим образом:
* $db_prefix = array(
* 'default' => '',
* 'users' => 'cl9055_system.',
* 'sessions' => 'cl9055_system.'
* 'role' => 'cl9055_system.'
* 'authmap' => 'cl9055_system.'
* );
*
$db_url = 'mysql:// cl9055_system:123456@localhost/ cl9055_system ';
$db_prefix = '';
4. Инсталлирую Drupal:
Логин: Администратор
Пароль: 123456789
5. Создаю несколько пользователей
6. Создаю на хостинге поддомен http://poddomen.system.ru
7. Создаю в директории system.ru/public_html/sites/ папку с именем poddomen.system.ru
8. Копирую в нее settings.php с папки «default»
9. Редактирую файл следующим образом:
* $db_prefix = array(
* 'default' => '',
* 'users' => 'cl9055_system.'
* 'sessions' => 'cl9055_system.'
* 'role' => 'cl9055_system.'
* 'authmap' => 'cl9055_system.'
* );
*
$db_url = 'mysql:// cl9055_poddomen:123456789@localhost/ cl9055_poddomen ';
$db_prefix = '';
10. Инсталлирую Drupal http://poddomen.system.ru/install.php
Логин и пароль аналогичные system.ru
11. В базе данных cl9055_poddomen удаляю таблицу users
12. Устанавливаю модуль SSO sso-6.x-1.0-rc1.tar.gz
13. Обновляю http://poddomen.system.ru и мне выдает ошибку:
«user warning: Table 'cl9055_poddomen.users' doesn't exist query: SELECT * FROM users u WHERE uid = 0 in /home/c/cl9055/system.ru/public_html/modules/user/user.module on line 167.»
При попытке авторизироваться, то есть ввести логин и пароль, мне выдает следующую ошибку:
• user warning: Table ' cl9055_poddomen.users' doesn't exist query: SELECT name FROM users WHERE status = 0 AND name = LOWER('Администратор') in /home/c/cl9055/system.ru/public_html/modules/user/user.module on line 520.
• user warning: Table 'cl9055_poddomen.users' doesn't exist query: SELECT * FROM users u WHERE LOWER(name) = LOWER('Администратор') AND pass = 'e1f9018a5da1ad096ccc0070054845dc' AND status = 1 in /home/c/cl9055/system.ru/public_html/modules/user/user.module on line 167.
• Sorry, unrecognized username or password. Have you forgotten your password?
• user warning: Table 'cl9055_poddomen.users' doesn't exist query: SELECT * FROM users u WHERE uid = 0 in /home/c/cl9055/system.ru/public_html/modules/user/user.module on line 167.
Как только, я делаю откат базы данных cl9055_poddomen. То все становится нормально. Также пробовал переносить таблицы с БД cl9055_system в cl9055_poddomen. Все замечательно работает, но опять – так база пользователей у них остается разной.
Пробовал для решения проблемы прописывать строчку в settings.php
<?php
# Single Sing On settings:
$conf['session_inc']='system.ru/public_html/modules/sso/session.singlesignon.inc'
?>
После этого сайты не захотели открываться вообще. Удалил – все вернулось на прежнее место с прежними ошибками.
Возможно, что – то еще нужно прописать или я ошибся на каком – либо шаге? Помогите разобраться в этой проблеме!
$result = db_query('SELECT * FROM {users} u WHERE '. implode(' AND ', $query), $params);
Нашел строку ошибки, возможно кто - то сталкивался с таким и подскажет, что нужно делать?
Комментарии
А зачем вы таблицу удаляете? Она вам чем-то мешает?
Это необходимо делать, для того, чтобы таблица users стала общая для обоих сайтов. По крайней мере так написано. Еще одна причина, это видимость того, ссылается ли второй сайт на таблицу users, первого сайта.
Надеюсь, cl9055 и cl8044 - это не идентификаторы разных клиентов на хостинге?
Ошибся при описании, везде cl9055 Исправил.
Господа, в чем же может быть проблема, очень нужна ваша помощь!
Прочитал абсолютно все статьи посвященные мультисайтингу на этому сайте. Даже через переводчик буржуйские переводил. Осуществил очередную попытку:
1. Создал базу данных;
2. Создал первый сайт;
3. Сделал бекап первой базы данных;
4. Залил таблицы с первой базы данных во вторую;
5. Поставил необходимы префиксы в settings.php второрого сайта;
Даже не пришлось инсталлировать Drupal. Cайты получились независимые несмотря на все изменения проделанные в settings.php
6. Удалил таблицу users со второго сайта и ошибка повторилась:
«user warning: Table 'cl9055_poddomen.users' doesn't exist query: SELECT * FROM users u WHERE uid = 0 in /home/c/cl9055/system.ru/public_html/modules/user/user.module on line 167.»
Не могу понять, как сделать таблицы общими!!!
Честно говоря много у Вас написано чтоб не запутаться просто напишу как делал я,
в связке два сайта.
Заглянул в свои settings.php:
Сайт №1
<?php
$db_url = 'mysql://Пользователь-базы-данных:Парольlocalhost/
префикс-базы_названиебазы№1';
$db_prefix = '';
?>
Сайт №2
<?php
$db_url = 'mysql://Пользователь-базы-данных:Парольlocalhost/
префикс-базы_названиебазы№2';
$db_prefix = array(
"default" => "префикс-базы_названиебазы№2.",
/* все таблицы не определённые ниже - берутся из базы данных сайта №2*/
"users" => "префикс-базы_названиебазы№1.",
"sessions" => "префикс-базы_названиебазы№1.",
"authmap" => "префикс-базы_названиебазы№1.",
"profile_fields" => "префикс-базы_названиебазы№1.",
"profile_values" => "префикс-базы_названиебазы№1.",
/*Пишите все необходимые таблицы которые нужно объединить и взять с сайта №1*/
);
?>
Обратите внимание:
У них одинаковый. По такой же схеме общие таблицы вообще можно вынести в отдельную базу данных(но с тем же префиксом).
Честно говоря таблицы я не удалял.
И Ваш супер юзер(uid=1) должен при создании иметь одинаковые данные.
Собственно и весь мой алгоритм надеюсь поможет.
Спасибо за ответ! У меня точно такой алгоритм написан, разницы между тем, что привел я и что написали Вы я не увидел. У Вас какая версия drupal? В строчке "default" ни чего писаться не должно. Но я пробовал и так, все равно ни чего. Возможно есть определенная последовательность установки отличающаяся от той, что привел я. Если будет возможность и желание напишите пожалуйста.
[#36877]Скринкаст[/#]
Пока писал на главной появилась Вам подсказка
Спасибо, что проявили интерес к моей теме. Но я работаю на прямую в хостинге. Я не использую Denwer. Проблема заключается в том, что таблицы в базах не хотят связываться между собой. Я могу без проблем создать работающие сайты которые работают независимо. Но у меня не получается связать их таблицей user, чтобы на обоих сайтах были пользователи.
интересная тема
мне скоро нужно будет пользователей объединять
Надеюсь у нее наступит логическое завершение...
Возможно нужно выставить какие либо права доступа. Господа - специалисты гляньте на мой код, все ли верно?
Это можно легко проверить. Поставте себе денвер(там всё просто) и воспроизведите мультисайтинг, если всё ОК значит где-то действительно чего-то не хватает на хостинге.
И я б Вам ещё посоветовал посмотреть этот доклад, там хорошо описано какие таблицы можно объединять какие не желательно. Или проверьте методом исключения какая таблица вызывает ошибку и что там в ней не так.
Желаю успехов!
Спасибо за ответ! Проверял на Денвере, та же ситуация. Доклад смотрел неоднократно. Есть предположение, что в Drupal 6.14 другая схема построения мультисайтинга. По крайней мере между 5 и 6 Drupalом разница есть.
Стало интересно. Ради спортивного интереса на денвер поставил два сайта pr1 pr2
Брал 6.14 с оф.сайт перевод(для удобства) здесь. Установил по описанию от сюда
Создал на сайте pr1 пользователя 11111.
На сайте pr2 по логину и паролю зайти естественно не смог(даже не буду на этом останавливаться).
settings.php pr1
<?php
$db_url = 'mysql://root:localhost/terras_pr1';
/*привожу как есть ценой открытия всему миру, что у меня на локальной базе нет пароля вообще*/
$db_prefix = '';
?>
settings.php pr2
<?php
$db_url = 'mysql://root:localhost/terras_pr2';
$db_prefix = array(
"default" => "terras_pr2.",
"users" => "terras_pr1.",
"sessions" => "terras_pr1.",
"authmap" => "terras_pr1.",
"profile_fields" => "terras_pr1.",
"profile_values" => "terras_pr1.",
);
?>
На pr2 опять заходим под пользователем 11111
Вам это нужно? Общие пользователи?
Если да попробуйте точно так же воспроизвести.
Если нет то значит я Вас не правильно понял
Желаю успехов!
Буду пробовать по Вашей аналогии.
Сделал 1:1 как у вас. Создал базы с таким же названием, папки, сайты. Даже юзера создал 1111, но на pr2 категорически не хочет заходить под юзером 1111
Ну тогда уж только танцы с бубном
Напоследок краткий алгоритм действий, чтоб окончательно свериться.
Я так "спаял" уже два по два сайта + тест.
Надеюсь Ваша проблема разрешится и у Вас будет "спаяно" намного больше.
Удачи!
Да, Вы ж отпишитесь по решению, интересно в чём таки дело было
Ни чего не получилось, возможно я какой – то нюанс не учитываю.
Установку производил так:
1. Создал две базы данных «terras_1» и «terras_2» c общим именем "root" и кодировкой "utf8_general_ci";
2. В папке "deafault" скопировал файл "default.settings.php" переименовал его в "settings.php" и вновь поместил в папку "deafault". Ни каких изменений перед установкой в нем не делал;
3. В папке "sites" создал папку "pr2", скопировал в нее ранее созданный файл "settings.php";
4. Произвел установку Drupal. Сперва на http://pr1 потом на http://pr2 . При установке указывал наименование баз данных для http://pr1 - "terras_1", для http://pr2 - "tettas_2";
5. После установки на сайте "http://pr1" создал пользователя "1111" с паролем "1111";
6. В папке "deafault" с файлом "settings.php" ни каких изменений не делал:
7. В папке «pr2» в файле «settings.php» произвел следующие имзменения:
8. Сохраняю и делаю «Restart Denver»
9. Выхожу из обоих сайтов с профиля главного юзера, захожу на сайт http://pr2. Ввожу логин "1111" и пароль "1111" выдает:
"Sorry, unrecognized username or password. Have you forgotten your password?"
Посмотрите, пожалуйста, в чем отличается последовательность Вашей и моей установки?
Я очищал кэш на сайтах, заходил через другой браузер, переписывал таблицы с БД terras_pr1 в terras_pr2 и создавал нового пользователя, но результат один и тот – же!
А у Вас вот это так и остается закомментированное???
* $db_prefix = array(
* 'default' => 'terras_pr2.',
* 'users' => 'terras_pr1.',
* 'sessions' => 'terras_pr1.',
* 'role' => 'terras_pr1.',
* 'authmap' => 'terras_pr1.',
* );
Не совсем понял Ваш вопрос.
Правильно сказать "закомментированным". Остается кем? чем? если речь идет о конкретной вещи. Творительный падеж ( Instrumental ).
Спасибо за поправку.
Может я и не правильно выразился. Но имел в виду это. Так, как у Вас написан код:
Работать не будет!
Нужно так:
<?php
/* 'default' => 'terras_pr2.',
* 'users' => 'terras_pr1.',
* 'sessions' => 'terras_pr1.',
* 'role' => 'terras_pr1.',
* 'authmap' => 'terras_pr1.',
* );
* Тут что угодно можно писать на работу это не влияет
* Database URL format:
* $db_url = 'mysql://username:password@localhost/databasename';
* $db_url = 'mysqli://username:password@localhost/databasename';
* $db_url = 'pgsql://username:password@localhost/databasename';
*/
$db_url = 'mysqli://root@localhost/terras_pr2';
$db_prefix = array(
"default" => "terras_pr2.",
"users" => "terras_pr1.",
"sessions" => "terras_pr1.",
"role" => "terras_pr1.",
"authmap" => "terras_pr1.",
);
?>
Я вот делаю так
есть основной сайт, в корне - его не трогаю
для второго сайта, сделал субдомен (папки у меня что то не пошли)
там, все как обычно, залил дамп швабра
в сеттингс прописал
<?php
/**
*
* $db_prefix = array(
* 'default' => 'main_',
* 'users' => 'shared_',
* 'sessions' => 'shared_',
* 'role' => 'shared_',
* 'authmap' => 'shared_',
* );
*
* Database URL format:
* $db_url = 'mysql://username:password@localhost/databasename';
* $db_url = 'mysqli://username:password@localhost/databasename';
* $db_url = 'pgsql://username:password@localhost/databasename';
*/
$db_url = 'mysql://имя_юзера_базы2:пароль_базы2@localhost/имя_базы2';
$db_prefix = array(
'default' => 'имя_базы2',
'users' => 'имя_базы1.',
'sessions' => 'имя_базы1.',
);
?>Мне выдается 404 ошибка
ничего не понимаю я уже с этим мультисайтингом
По идее должно работать только точечку нужно добавить
<?php
'default' => 'имя_базы2.',
?>
добавил точку, отрылось с кучей ворнингов
и друпал ищет таблицы не те, что у меня
и тому подобное
убрал указание базы - таже картина
если местами меняю "подключение базы" и указание префиксов
то вываливается user warning: SELECT command denied to user 'имяюзерабазы2'@'localhost' for table 'users' query: .....
Не видя ситуации трудно сказать в чём дело.
Могу лишь посоветовать последовательно.
Из написанного я понял что в sql запросе в имя таблицы подставляется база данных + она же подставляется до точки как и должно быть.
Скорей всего не правильно заданы префиксы таблиц в settings.php
Всё что нужно drupal сказать все таблицы бери здесь, а эти и эти возьми здесь и правильно направить, а он на вход для работы должен получить определённый набор данных и ему главное их правильное содержание и не важно от куда.
Желаю успехов!
Да и не забывайте что пароль_базы2 должен совпадать с паролем_базы1, так как к "не дефолтным" таблицам которые Вы прописываете:
он будет входить под паролем_базы2 беря из settings.php сайта №2
пароли от баз разные
но, в phpmyadmin я добавил пользователя (еще одного) для базы основного сайта
Я сейчас локально с импровизировал и подключил сайт_1 полностью к базе данных другого_2 (правда drupal 6 к 6 и с общим пользователем базы данных (тема полетела, но зайди под пользователем другого_2 на сайт_1 смог)) попробуйте, если получится хоть будете знать что с паролями и пользователями базы данных всё ОК.
Что-то я не совсем понял. Сначала вы вместо префикса базы пытались ее имя подсунуть. Потом начали сайт к двум базам цеплять?
Сайт №1
<?php
$db_url = 'mysql://Пользователь-базы-данных:Парольlocalhost/
префикс-базы_названиебазы№1';
$db_prefix = 'N1_';
?>
Т.е. В базе будут таблицы типа N1_user
Сайт №2
<?php
$db_url = 'mysql://Пользователь-базы-данных:Парольlocalhost/
префикс-базы_названиебазы№2';
$db_prefix = array(
"default" => "префикс-базы_названиебазы№2 (N2_).",
/* все таблицы не определённые ниже - берутся из базы данных сайта №2*/
"users" => "префикс-базы_названиебазы№1. (N1_)",
"sessions" => "префикс-базы_названиебазы№1.",
"authmap" => "префикс-базы_названиебазы№1.",
"profile_fields" => "префикс-базы_названиебазы№1.",
"profile_values" => "префикс-базы_названиебазы№1.",
/*Пишите все необходимые таблицы которые нужно объединить и взять с сайта №1*/
);
?>
Есть ли корректное описание настройки таблиц для мультисайтинга под D7? Реальзовал, обрадовался, но когда попробовал добавить страницу в таблицу с уникальным для сайта префиксом - друпал выдал: «На сайте произошла непредвиденная ошибка. Пожалуйста, повторите попытку позже.»
Хотелось бы дополнить - никогда не используйте знак "-" (тире) в названии общей базы данных. Проверено на друпале 6.25 - не работает ни в какую.