Неправильно создаются категории (как через импорт, так и вручную)
#1
Отправлено 21 December 2016 - 08:23 PM
Однако. Подготовил файл каталога для импорта, сохранил в csv по уже давно откатанной технологии. Импортирую... скрипт падает и выдает ошибку на белом странице:
Страница shop.greenfish.su не работает
Сайт shop.greenfish.su не отправил данных.
ERR_EMPTY_RESPONSE
Что за черт? Начал изгаляться с файлом импорта так и этак, выгрузил из другой установки заведомо годный, рабочий файл, заливаю в новую копию скрипта - та же картина. Ок, очищаю каталог через импорт и пробую создать категорию вручную в админке - скрипт вываливается с тем же результатом (в пользовательской части при попытке обратиться к каталогу сайт тоже падает).
Полез в phpmyadmin - логов по ошибкам в импорте не нашел (вообще никаких логов об ошибках с 13.12.16), но выяснил, что при создании категории вручную она создается с нулевым categoryID, при попытке импорта через файл картина та же. Если создать категорию вручную в админке, а потом через phpmyadmin руками прописать categoryID - она начинает без проблем отображаться в каталоге (и в админке, и в юзер-части), с ней можно работать, создавать в ней товары. То есть, сбой происходит именно при создании категорий - не задаются их ID. С чего бы вдруг такое - не могу понять, ведь все файлы, включая шаблон, копировали с заведомо рабочей копии. Повторно перезалил все php и вообще все, кроме конфигов, переписанных под новую копию - ситуация не изменилась. Не пойму, куда копать и что еще менять.
#2
Отправлено 22 December 2016 - 12:15 AM
или разбивай csv
или меняй настройки сервера
для проверки попробуй на локальный OpenServer импортировать - там нет ограничения на время выполнения скрипта
#3
Отправлено 22 December 2016 - 08:05 AM
Я пробовал с минимальным объемом файла импорта: одна категория и один товар. И да, при создании категории вручную через админку - такой же результат.очень долгий запрос выполняешь, при импорте csv вот тебя сервер и выкидывает.
или разбивай csv
или меняй настройки сервера
для проверки попробуй на локальный OpenServer импортировать - там нет ограничения на время выполнения скрипта
У меня был именно такой случай, с долгим выполнением импорта, когда я заливал ок. 10000 наименований - приходилось разбивать на 2-3 файла и по частям заливать. Симптомы те же, а вот корень проблемы совершенно иной.
#4
Отправлено 22 December 2016 - 04:31 PM
Некорректно (неправильно) созданы таблицы. Врядли только категорий (xxxx_categories), а, скорее всего, и все остальные, где есть автоинкремент.но выяснил, что при создании категории вручную она создается с нулевым categoryID
Поле categoryID в этой таблице - автоинкрементное. Т.е. оно не заполняется каким-то значением (номером категории) в строке запроса, а при добавлении записи АВТОМАТИЧЕСКИ принимает значение на единицу больше максимального предыдущего.
Т.е. запрос INSERT INTO xxx_categories name='Тест' приведет к созданию записи, где name=Тест, а categoryID=предыдущее значение+1.
Автоинкрементное поле не может быть нулевым, оно всегда больше нуля, т.к. первое же создание записи в пустой таблице приводит к "на единицу больше предыдущего", а предыдущего нет, т.е. ноль.
Другими словами, то, что в categoryID находится ноль однозначно указывает, что это поле не имеет свойства автоинкрементности, а тот, кто создавал бэкап где-то прокололся.
Вот так выглядит структура таблицы категорий (видите там auto_increment - напротив categoryID?)
mysql> DESC shop2_categories; +-----------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------------+--------------+------+-----+---------+----------------+ | categoryID | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | parent | int(11) | YES | MUL | NULL | | | products_count | int(11) | YES | | NULL | | | description | text | YES | | NULL | | | picture | varchar(30) | YES | | NULL | | | products_count_admin | int(11) | YES | | NULL | | | sort_order | int(11) | YES | MUL | 0 | | | viewed_times | int(11) | YES | | 0 | | | allow_products_comparison | int(11) | YES | | 0 | | | allow_products_search | int(11) | YES | | 1 | | | show_subcategories_products | int(11) | YES | | 1 | | | meta_description | text | YES | | NULL | | | meta_keywords | text | YES | | NULL | | | title | text | YES | | NULL | | | subcount | int(11) | YES | | 0 | | +-----------------------------+--------------+------+-----+---------+----------------+ 16 rows in set (0.00 sec)А вот так мы можем получить команду, которой была создана таблица (видите все тот же auto_increment напротив categoryID?):
mysql> SHOW CREATE TABLE shop2_categories; +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | shop2_categories | CREATE TABLE `shop2_categories` ( `categoryID` int(11) NOT NULL auto_increment, `name` varchar(255) default NULL, `parent` int(11) default NULL, `products_count` int(11) default NULL, `description` text, `picture` varchar(30) default NULL, `products_count_admin` int(11) default NULL, `sort_order` int(11) default '0', `viewed_times` int(11) default '0', `allow_products_comparison` int(11) default '0', `allow_products_search` int(11) default '1', `show_subcategories_products` int(11) default '1', `meta_description` text, `meta_keywords` text, `title` text, `subcount` int(11) default '0', PRIMARY KEY (`categoryID`), KEY `IDX_CATEGORIES1` (`parent`), KEY `SORT_ORDER` (`sort_order`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1 | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
#5
Отправлено 23 December 2016 - 01:14 PM
Таблицы создавал (точнее, копировал) я в phpmyadmin. Признаюсь сразу - я рукожоп, в mysql не умею. Написал письмецо в суп хостеру с просьбой помочь, но пока ждал ответа (не дождался), по привычке полезть гуглить (зачастую таким способом ответ находится быстрее, плюс в итоге сам начинаешь понимать. что делаешь). Суп же теребил по той причине, что хотел сделать сразу все правильно, как положено, через sql-запрос.
В итоге в гугле не смог найти, как правильно составить запрос для копирования "пакета" таблиц - все результаты поиска давали что-то близкое, но не совсем то или даже совсем не то, а изучать mysql "за полчаса" не было вариантов. Нашел только примерную инструкцию на похожую тему, как сделать через гуево-визуальные средства myphpadmin. Методом тыка и пристального взгляда, через "черновики" попробовал копирование таблиц с рабочей копии ShopCMS на этом же хостинге, но в другом домене (и с другим префиксом, соответственно). И вот, ничтоже сумняшеся, копирую набор таблиц с префиксом (допустим) abcd_ с присвоением им префикса dcba_ - все переносится вроде бы, корректно - состав и содержимое таблиц один-в-один (на первый взгляд профана), все работает - что еще надо? Конечно, армейский метод про*ба - налицо Ну и, как показало дальнейшее развитие событий, и как Вы сами указали, скопировались (создались новые) таблицы некорректно. Сейчас полезу в myphpadmin и буду более пристально курить, где еще что не так, как надо, скопировалось. По такой логике, понимаю, что, как Вы и написали, подобные грабли в новых таблицах должны проявиться везде, где это возможно (с автоинкрементом). Просто пока до них черед не дошел в повседневном использовании (сайт еще не запущен).
Вот что обычно и бывает, когда шаловливые ручки лезут туда, где мозги не имеют скилла Почему и обратился сразу в суп - ну, хоть исходные таблицы не запорол
#6
Отправлено 23 December 2016 - 01:53 PM
Насколько я помню, от R.Sergey.
Лично я делаю так:
1. создаю с нуля пустой сайт. Т.е. копирую файлы ShopCMS, запускаю install.php и т.д. - штатное создание сайта.
2. запоминаю, с каким префиксом я создал таблицы в базе.
3. выполняю в админке старого сайта в "Администрация БД" импорт базы данных (именно базы данных, а не каталога товаров).
4. меняю в полученном бэкапе префиксы таблиц на запомненный в п.2
5. выполняю в админке нового сайта экспорт базы данных.
6. копирую все файлы старого сайта поверх файлов нового сайта.
Писал на память, мог где-то ошибиться, так что лучше по проверенной инструкции.
Общая идея банальна: сначала создаем пустой сайт с нуля, затем меняем в нем таблицы и файлы на нужные.
#7
Отправлено 24 December 2016 - 09:52 AM
Мне кажется, или в п. 3 - экспорт, а в п.5 - импорт?3. выполняю в админке старого сайта в "Администрация БД" импорт базы данных (именно базы данных, а не каталога товаров).
5. выполняю в админке нового сайта экспорт базы данных.
То есть, таким способом, даже если имеют место грабли с php свежее поддерживаемого 5.3 (у моего прова сейчас 5.5, по-моему, из-за чего свежая установка проходит криво), то после переноса БД и файлов со старого сайта на новый, все работает как положено?
Как-то я не подумал насчет полной инструкции. Искал по vsupport материалы, как поступить именно с таблицами в sql, а про простой готовый рецепт и не подумал. Сейчас попробую все таким образом поправить - терять уже нечего, кроме как перебирать вручную все таблицы
Спасибо за совет!
Перенес все за какие-то 5 минут, файлы перезаливать не понадобилось, т.к. они и так уже полностью подтянуты с рабочей копии, а префикс при установке я задал тот же, что уже прописан в конфигах этого сайта.
Буду пользоваться впредь. "Век живи - век учись", - подумал поручик Ржевский и переложил портсигар из кармана брюк в жилет
#8
Отправлено 24 December 2016 - 11:50 AM
Да, конечно.Мне кажется, или в п. 3 - экспорт, а в п.5 - импорт?
Нет, конечно. На 5.4+ ShopCMS как положено не работает. Дальше проблему, как мне кажется, можно и не обсуждать. Если, конечно, у Вас нет инсталлятора ShopCMS, переделанного под 5.4+.То есть, таким способом, даже если имеют место грабли с php свежее поддерживаемого 5.3 (у моего прова сейчас 5.5, по-моему, из-за чего свежая установка проходит криво), то после переноса БД и файлов со старого сайта на новый, все работает как положено?
#9
Отправлено 09 January 2017 - 11:01 AM
Тут, наверное, я неправильно сформулировал свой вопрос, но суть я понял и главное - проблема решена.Нет, конечно. На 5.4+ ShopCMS как положено не работает. Дальше проблему, как мне кажется, можно и не обсуждать. Если, конечно, у Вас нет инсталлятора ShopCMS, переделанного под 5.4+.
Спасибо за подсказку! С Новым годом и "творческих узбеков"