Искал по этой теме Яндексом расширенным поиском. Ничего подходящего не нашлось.
Как можно надежно установить по пути до файла, по параметрам запроса, по куки или по чему-то еще что именно находится в данном файле?
Сейчас можно встретить по два файла import и offers, появились также prices и rests. Понимаю зачем (не нужно грузить, к примеру, весь файл, если нужно обновить только остатки, цены или матаданные). Но при приеме возникают задачи, когда нужно что-то "доделать" на стороне сайта. Возможности как-бы для этого есть - обработчик события успешного окончания импорта. Но никаких данных о контексте в нем нет (я о рабочей папке, факте обработки предложений, цен, остатков ...) Это к разработчикам со стороны Битрикс.
Со стороны 1С эту задачу можно было бы облегчить передав в запросе на сайт параметр, указывающий на основное содержимое текущего файла обмена. А может это и не нужно и по путям модно понять ...
Мне известен путь решения задачи без кастомизации компоненты обмена. Нужно работать с деревом XML в БД и проверять наличие интересующих тегов (спасибо, что до сих пор эта возможность есть, в обмене заказами и справочниками со стороны сайта пошли другим путем). Хотелось бы решение попроще. Оно есть?
Я уже проверил по кодам (sale 14.5.16 25.10.2014; CIBlockCMLImport::ImportPropertyDirectory), что реально на автомате идет обмен только XML_ID и названия. Название может быть изменено на сайте, если оно изменилось в 1С. Все остальное руками.
Есть похожая тема, но там какой-то гибрид из отдельного справочника и свойства типа Справочник. Зато есть слова о том, что идут некие разработки (уже месяц идут).
Какие теги будет использован для остальных полей - Ссылка (UF_LINK), Описание (UF_DESCRIPTION), Полное описание (UF_FULL_DESCRIPTION), Сортировка (UF_SORT), Изображение (UF_FILE), По умолчанию (UF_DEF)?
Наиболее остро стоит вопрос картинкой.
Также интересует вопрос выгрузки произвольных полей для свойства типа Справочник по аналогии с отдельным справочником (там можно в настрйоках обмена выбрать что угодно из реквизитов).
Вопрос возник потому, что на обмен версии 4 владелец магазина перейти быстро не готов, но и совершенно нестандартные вещи делать не хочется. Есть желание ограничится программированием в 1С, а Битрикс будет получать эти данные стандартным путем, без кастомизаций и других доработок.
sleeper sleper написал: Думаю, вам необходимо создать шаблон, именно в нем можно "подтягивать" динамическую информацию
Не о том спрашивал человек.
Самому стало интересно. Проверил в модуле рассылок версии 14.5.1 (08.07.2014). Там нет поддержки макросов (как это делается в шаблонах почтовых событий). Грядет большле изменение этого модуля, может там что и придумают ...
Обновился до sale 14.5.14 и такой сюрприз. В 1С этот комментарий создается реквизита Сайт, номера заказа на сайте. Операторы в 1С, само собой, дописывают туда свое. Вот этот комментарий возвращается на сайт в поле "Комментарий менеджера". Но при отмене выгрузкой 1С заказа буквально этот комментарий дублируется и в причину отмены. Там данные не предназначенные для глаз клиента!
Добавлено:
Проверил старые (когда класс загрузчика еще был в файле компоненты) и новые исходники. В обих случаях комментарий искали в теге <Комментарий>. Но в старом варианте он как-то не находился и не сохранялся ни в комментарий менеджера, ни в причину отмены. В новом сохраняется. Чтобы точно сказать что произошло, нужно детально разбираться в коде. Он заметно переписан, могли просто исправить "ошибку".
Мне интересно, это я один такой счастливый или на всех магазинах со свежей версией можно увидеть в причине отмены примерно такое "№ 1000 www.example.com [s1] Лучший магазин"?
Тестирую Покупку на Маркете. Там есть для этого страница для тестирования API. Заказы приходят на сайт, но не уходят в 1С. Почему?
Добавлено:
Настройки Покупки на Маркете и Интеграции с 1С я проверял. Документацию и курс смотрел.
Добавлено 2:
Заказы, полученные из Маркета считаются внешними. Внешние заказы (те, что в поле EXTERNAL_ORDER имеют Y) стандартной компонентой sale.export.1c не выгружаются в принципе.
Решения здесь может быть два:
Кастомизация компоненты с целью отмены этого фильтра (условно, по наличию в XML_ID признаков Маркета, либо безусловно).
Обработчики событий создания (и, возможно, изменения) заказа. В них нужно для заказов Маркета снимать признак внешнего заказа.
Оба варианта таят в себе пакостный подводный камень. Заказ из Маркета - хитрый заказ, первые 10 минут его заказом лучше не считать (он недописан до конца и может быть отменен по истечение этого времени).
Maxim Smirnov пишет: в поле "Внешний код" введите "FUTURE-1C-CATALOG"
В коде класса CIBlockCMLImport я видел проверку на тот случай, если по XML_ID инфоблок не найден. Не видел этого рецепта ранее, задавал XML_ID по схеме catalog-<GUID из настроек обмена 1С>, у меня тип инфоблока, куда загружать - catalog. Пример XML_ID - catalog-52326fe1-9fa1-4123-3648-f2918adf27da
По идее, должно работать и так, но хронически не работает. Уже третий каталог приходится перенастраивать после выгрузки из 1С.
В упор не понимаю почему код не находит ничего при первой выгрузке, но всегда находит при второй:
Но факты говорят за себя - действительно не находит и создает инфоблок заново. Думал, что дело в том, что я отдельного инфоблока для торговых предложений не использую. Но это тупиковая идея (посмотрел как формируется в этом случае XML_ID).
Инфоблоки по этим магическим кодам находятся так:
Код
//Also check for non bitrix xml file
if(!$ar && !array_key_exists("CODE", $arIBlock))
{
if($this->next_step["bOffer"] && $this->use_offers)
$rsIBlocks = $obIBlock->GetList(array(), array("XML_ID"=>"FUTURE-1C-OFFERS"));
else
$rsIBlocks = $obIBlock->GetList(array(), array("XML_ID"=>"FUTURE-1C-CATALOG"));
$ar = $rsIBlocks->Fetch();
}
Т.е. если завести каталог на двух инфоблоках, то на товары нужен FUTURE-1C-CATALOG, а для предложений - FUTURE-1C-OFFERS.
Эта "фича" как раз и задумана для первоначальной загрузки? По коду вижу, что сразу же XML_ID будет заменен на то, что приходит из CML (с учетом типа инфоблоков). Так что точно сделано на один раз. В учебных курсах об этом ничего не сказано, есть только на форуме, но поиски начинаются, как у меня, после надцатой неудачи ...
Юрий Волошин пишет: скорей вы не следите за выпусками версий машин и достаточно поверхностно в ней понимаете
И правда, я имел дело с неработающей 5.0.37 и сомнительной 5.0.44. Я действительно не слежу за выпусками. Следить не за чем пока.
Цитата
Юрий Волошин пишет: если вы внимательно посмотрите статью я начал установку с достаточно старой версии, и рассмотрел все варианты, вплоть до обновлений
Представьте себе, я видел.
Цитата
Юрий Волошин пишет: Машина развивается, мы стараемся вносить улучшения постоянно и в новой машине, что бы не заморачивать пользователей, мы убрали некоторые части операций, которые можем сделать и мы. Но это есть только в новой машине, а статью читаете не только вы, и машину берут не все 5.х
Ну кто бы мог подумать, что статья о новой машине, которую Вы же рекламировали с мая, окажется не о новой машине, а неизвестно о чем ... По старой машине есть куцый учебный курс, там даже раздел переименовали на 4.3 ...
В общем, попытка не зачтена. Работаете плохо.
Цитата
Юрий Волошин пишет: И постарайтесь воздержаться от достаточно обидных высказываний в начале вашего сообщения к людям которых вы не знаете и которые сделали за достаточно небольшой срок очень сложный и перспективный продукт, которые доводится до идеального состояния и который на рынке не кто не делает не для одной CMS.
А знаете, я воздерживаюсь. Потому что в рабочей ситуации идут маты, море нервов, а не эти жалкие намеки ... Никого не интересуют эти нюансы, продукт либо работает, либо нет. И это Вы отрекомендовали его как рабочий. Да и на сайте конторы он уже выставлен для скачивания всем. Я бы воздержался и от этих весьма мягких комментариев, если бы 5.0.44 была бетой. Но таковой была 5.0.37.
Знаете что обиднее всего? Я поверил конторе, а верить было нельзя! Ни в коему случае! И это лично Ваша заслуга! Обидно? Обижайтесь!
Цитата
Юрий Волошин пишет: у и критиковать очень легко, и заголовок не такой, и тексты не такие, но давайте тогда уж начнем и делать, напишите статью как она вам видится и я с удовольствием ее опубликую в блоге.
Ну что же Вы все оправдываетесь ... Просто сделайте нормально. Либо не рекламируйте так. Честно бы написали, что это конструктор для профессиональных админов, что он работает черти как, что надеяться на него в релизе (на рабочих сайтах) нельзя, что используем мы его на свой страх и риск, никто бы и рта не открыл. Более того, я бы внял советам профессиональных админов вообще эту каку не трогать. А теперь я не знаю как перед ними оправдываться ...
Можно было еще, как один Ваш добровольный защитник, написать о открытом софте, что не нравится - доработайте сами. Но об этом тоже корректно предупреждать заранее.
Юрий Волошин, у меня лично к Вам есть претензии. Вы используете методы нечистоплотной рекламы. И я давно это вижу. Кроме того, в моей практике была ситуация, когда я столкнулся с откровенной ложью с Вашей стороны. Вы уверяли, что не было изменений в компоненте выбора местоположения, а шаблон реально пришлось менять, т.к. логика его изменилась после этого обновления. Вы заткнули рот и мне, и еще одному пострадавшему (кстати, грубовато, сейчас тоже самое получаете в ответ). Так что доверия Вам особого нет. И извиняться мне не за что. Уж кого, а Вас я знаю как раз по этому случаю. Спросили бы тогда что именно пришлось менять, Вам бы ответили. Но Вы в позу встали, что не менялось ничего, а клиенты и партнеры вынуждены были счищать с себя ... (нечистоты, в общем).
Nikolay Ryzhonin,спасибо. Т.е. нет никаких процедур их меню Битрикс окружения, которые могут перетереть файл с правилами?
У меня был неприятный инцидент с ISPManager - он управляет правилами сам и перетирает все правила, сохраненные таким образом. Вопрос по Битрикс-окружению возник потому, что это тоже непростая система и в ней запросто могут оказаться подобные же фокусы. Получается, что окружение сейчас набивает правила только один раз - при создании пула, а дальше уже ни во что не вмешивается?
Александр Панишев пишет: Предложение -объедините все ветки по пятерке в одну!
Не надо. Потом вообще ничего не найдешь. Есть печальный опыт - на сайте Мегафона так форум ведут и наказывают посетителей за отдельные темы. Приходится перечитывать десятки страниц, чтобы найти, либо сразу писать вопрос, который уже 20 раз был отвечен.
Компания СКАУТ пишет: дайте нам больше инфы и прозрачности, мы понятливые, просто эксперимент реально затянулся и кушает много времени и денег.
Согласен. Я уже пожалел, что ввязался. Думал получу качественный продукт от приличной конторы, а получился полуфабрикат (я просто прилично выражаюсь) от малоизвестной группы неформалов (снова прилично).
Очень сильно недостает качественно документации. Да хотя бы статьи нормальной, которая освещает все, что есть в ВМ и Битрикс-окружении. Пока же читаю статью и вижу, что автор видел Битрикс-окружение давно. В моем случае порты открылись автоматом, не нужно было ничего с ними делать самому (я о перечисленных там). Просто создал пул и все настройки по iptables объявились сами. Зато заголовок красивый (точнее, откровенно желтый) ....
Для ускорения работы сервера (памяти достаточно), смонтировал /tmp на tmpfs.
Разумеется (ну об этом я сразу не подумал), попал на грабли. ... Структура папок для хранения сессий и загружаемых по PHP файлов пропала, авторизоваться на сайте нельзя, в админку зайти тоже.
Структуру папок я сохранил на HDD, потому достаточно быстро исправил ситуацию.
Теперь вопрос как эту структуру правильно восстанавливать.
Я могу влезть в rc.local со своим рекурсивным копированием структуры с HDD на /tmp
Я могу оформить свой сервис и загружать его до httpd.
Либо я воспользуюсь неким неизвестным меню Битрикс-окружения, либо существующим скриптом ... .
Третий вариант наиболее интересен, т.к. Битрикс-окружение точно знает какие есть сайты и как принято в нем хранить сессии и загружаемые файлы.
Мне потребовалось внести два правила для proftpd (1C-ка хочет его, по sftp без танце не будет работать). Не факт, что при настройках окружения этот файл не потрется.
В меню 2. Manage localhost / 3. Configure network inteface manually я не входил. Страшно на рабочем сервере на зная тыкать.
В статье домохозяйкам есть о редактировании настроек iptables. И вроде все понятно. Но тогда зачем в файле с правилами вот это
Цитата
# Ansible managed: /etc/ansible/roles/common/templates/iptables.j2 modified on 2 # iptables state module: enable # guest_type: NA # Manual customization of this file is not recommended.
Вижу массу location (ни в какое сравнение с тем, что генерит ISPManager, в Битрикс-окружении их в десяток раз больше). После привычных location@fallback, location /, вижу кучу location, которые могут отвечать на динамическую страницу, а могут и нет.
Вроде как задумано для статики, но может быть и динамика.
Директиву limit_req можно поместить только в location, не if. Тогда если я хочу ограничить активность только на динамических страницах, то решения нет?
Руслан Манаенко пишет: Заметили вот такой нюанс в панели производительности http://screencast.com/t/bVpb7KmDiv - а до обновления была цыфра 25 млн операций в секунду сейчас 6,3 - с чем может быть связано ктото сталкивался?
Я не сталкивался. Но лучше погонять этот тест из своего скрипта. Достаточно посмотреть код класса CPerfomanceMeasure, там есть соответствующий метод. Цель мероприятия - погонять тест дольше нескольких десятков миллисекунд.
Установил BitrixEnv 5.0.44, перенес сайт, проверил в мониторе производительности конфигурацию. На чтение из БД она давала 15 000 операций в секунду. Главная страница сайта (280 запросов) требовала 1,9 с.
Ок, перенес со старого сайта настройки MySQL (все внес в /etc/mysql/conf.d/z_bx_custom.cnf). Получил при той же производительности уже 1,3 с. (там я по совету монитора производительности делал настройки).
Решил улучшить результат и занялся настройкой буферов InnoDB. Я тогда настраивал буферы временных таблиц (tmp_table_size и max_heap_table_size). Перегрузил MySQL, а проверками занялся только через 10 часов.
В итоге получил 12 с на главной! Убрал свои настройки (переименовал z_bx_custom.cnf в z_bx_custom.cnf.bx) - все равно 12 с. Тогда какие-то внешние причины. Ок, проверил с помощью sysbench производительность диска - она не изменилась!
Монитор производительности сначала казал теже 15 000, а потом 7 000 (тут на 100% не поручусь, работа шла в истерично-нервном режиме, в итоге точно 7000).
Это похоже на колдовство, но мы, все-таки, имеем дело с софтом и железом ... Я точно вернул все как было в настройках, но при этом что-то изменилось. MySQL не переустанавливал (осталось таким образом пересоздать системную БД).
Я с большим трудом получил 1,8 с установив innodb_buffer_pool_size в 10ГБ. Но и здесь была мистика - я видел и 0,5 с. Но эти замечательные данные пропали в результате "дерганья" настроек.
В один прекрасный момент при перегрузке MySQL я видел ошибку с перечислением кучи динамических библиотек. В логе MySQL же было "Error in opening ./ibdata1". Файл же на месте был! Для гарантии после этой ошибки я удалил все файлы INNODB и стартовал сервер заново (чтобы не думать, что есть файлы несоответствующие друг другу), залил заново БД из дампа. Но и это не помогло.
В БД не так много данных (вместе со статистикой 1,5ГБ).
У меня железный сервер и 96 ГБ ОЗУ. Два процессора по 4 ядра, поддержка HT. Диски дают 260 МБ/c на последовательной записи со случайным чтением. Диски SSD.
Такого безобразия на этом железе не может быт, но оно есть!
Но что обидно - нет явной зависимости от чего бы то ни было. Что можно еще проверить? У кого было подобное, как решили вопрос?
Добавлено:
Проверил производительность процессора (на одном ядре). Она не изменилась:
Код
# sysbench --test=cpu --cpu-max-prime=20000 run
...
total time taken by event execution: 28.6357
....
Добавлено 2:
Видел похожую тему, но по Debian (у меня CentOS 6.5). Только там сразу были проблемы (или автор не признался, что игрался с настройками и производительность упала после этого). Решил он свою болячку только переустановкой.
Добавлено 3:
Делал также тесты БД в мониторе производительности и в sysbench.
Монитор сейчас дает (запуска с интервалом между ними 5 с):
База данных MySQL (запись) 7 035 База данных MySQL (чтение) 11 888 База данных MySQL (изменение) 6 433
База данных MySQL (запись) 9 015 База данных MySQL (чтение) 11 706 База данных MySQL (изменение) 6 664
По чтению из БД в этом тесте бывало и 7 000.
Этим данным особой веры нет - там тест сам по себе сомнительный. Можете сами посмотреть CPerfomanceMeasure::GetDBMark (\bitrix\modules\perfmon\classes\general\measure.phpl\bitrix\modules\perfmon\classes\general\measure.php). Тест идет на 100 запросов INSERT, SELECT, UPDATE по 4 раза. Считают микросекунды с коррекцией времени на время работы PHP. Идет усреднение четырех измерений. Каждое изменение перед усреднением перводится в скорость (запросы в секунду). Скакать он должен по родовым признакам. Полезен здесь достигнутый максимум и минимум.
Было до странного падения производительности:
База данных MySQL (запись) 7 484 База данных MySQL (чтение) 15 059 База данных MySQL (изменение) 6 681
sysbench гонял только после возникновения проблем.
Юрий Волошин пишет: Сейчас если не создается дефолтный сайт, то да будут проблемы, не к чему например делать линк.
Да, я с этим столкнулся. Сайт типа link в приципе не создается, если нет основного.
Цитата
Юрий Волошин пишет: И какой тип сайта создавался линк или кернел.
Я создавал типа link.
Добавлено:
Думаю, что знаю в чем дело. На реальном сервере вводил существующий в DNS домен для второго сайта. Порт в итоге 80. Работает сразу. Для локальных установок, видимо, сначала нужно поправить /etc/hosts на сервере с Битрикс окружением. А потом уже создавать первый (это при создании пула наверное) и второй сайт. Далее, тоже самое нужно провести на ПК. Я делал эти настройки на локальной установке после создания.
Ок. Напишу о себе. Я делал локальную установку (развернул CentOS 6.5 Minimal на виртуальной машине VirtualBox, установил 5.0.37 и обновил до 5.0.44). Далее создал пул, далее зашел в управление сайтами пула и выбрал п. 1 для создания нового.
Юрий Ефремов пишет: Конфиги при этом для него создаются, но видимо не верные.
Доступен только основной сайт.
У меня в конфиге видно, что сайт повешен на отдельный порт. Его еще и открыть нужно, чтобы увидеть, что хотя бы в этой конфигурации все работает. Допиливать надо полученные конфиги.
7 июля 2014 года вышла свежая версия CentOS 7. На текущий момент свежайшая версия Битрикс-окружения для Linux - 5.0.44 (и тоже вышла 7 числа). Судя по списку исходников в новой версии CentOS и PHP поновее - 5.4.16.
Стоит ли возиться с переустановкой? Апгрейд CentOS до семерки дело не простое, так что переустановка будет значительно проще ...
Юрий Волошин пишет: Анатолий, а не затруднит вас написать в техническую поддержку и дать доступ к вашему серверу, посмотрим, что не так. Вроде бы локально сайты создаются отлично и я локально проблему не воспроизвожу. Номерок тикета можно написать сюда.
Не затруднит конечно, только я работаю сейчас на образе VirtualBox (туда ставил BitrixEnv на CentOS 6.5 Minimal). Здесь только если поддержка примет архив с виртуальной машиной ...
Добавлено:
Пока же я написал обращение 505964 для того, чтобы понять как вообще дальше доводить настройки вручную (какие файлы можно редактировать, а какие обязательно потрутся при следующем обновлении окружения или при использовании меню в консоли). Это явная проблема из-за отсутствия документации.
Юрий Волошин пишет: Можно обновляться, пакет доступен.
Обновился. Сайт (дополнительный) создается. Но после этого оба сайта (основной и дополнительный) в консольном меню "6. Manage sites in the pool" имеют статус error. Основной сайт при этом работать не перестал. Так что это мнение именно меню управления окружением. О чем оно вообще?
Второй сайт создан слушать на порту 8080, он не открыт автоматически. Видимо, задумано, что настройки будут допиливаться. Ок, файлы, после первоначального создания сайтов в папках /etc/httpd/bx/conf и /etc/nginx/bx/site_avaliable
Я вижу меню "4. Change email settings on site", "5. Change https settings on site", "6. Change backup settings on site". Пока не разбирался что это .. Дальше конфиги меняются только вручную или часть изменений может быть сделано из меню? Не потрутся ли ручные изменения?