Обновить
-22
Артем@anydasa

php, sql, js, scss, html — все в одном

-4
Рейтинг
2
Подписчики
Отправить сообщение
=) но вопрос остался тем же, зачем локальный Dockerfile если мы фактически вручную вносим изминения в родительский образ? Зачем тогда вообще что то собирать? Сделали docker pull чего нам надо, и юзаем
у себя я это сделал через кеширование папки vendors и работает оно быстро, ведь нужно только сравнить composer.lock и папку vendors
А какой тогда смысл в локальном php Dockerfile, если вы изминения будете вносить в базовый образ?
О, теперь ясно, спасибо! Но ИМХО, это не правильно, базовый образ «критично» связан с gitlab-ci. И это не явно. Можно легко все нечаянно сломать
Андрей. спасибо за такие подробные ответы, но я хотел бы уточнить.

Вы тестируете образом «covex/php7.1-fpm:1.0», а на продакшене образ от этого файла который наследуется от «covex/php7.1-fpm:1.0».

Если вы будете менять образ для прода, вы ведь в этот же файл планируете вносить изминения, а не в базовый образ? Если так, то получается два разных образа.
На сколько я знаю, кеширование папок делается вот так
cache:
  paths:
    - vendor/

А каким образом это происходит у вас? ведь наполненый кеш композера и заполненая папка vendors это все таки разные вещи. И для исполнения скриптов нужно чтоб были фалы в vendors, а не в кеше композера.
Не уверен что я правильно вас понял.
Вы описали так джоб, где композер инсталирует зависимости
deps:php-composer:
    stage: deps
    image: covex/php7.1-fpm:1.0
    script:
      - echo ...
      - composer install --prefer-dist --no-scripts --no-autoloader --no-interaction

Но это не боевой контейнер, а «covex/php7.1-fpm:1.0», вы ведь когда будете изменять php docker image (тут) образы могут быть разные. Вы тестируете не тем образом что будет в продакшене
Не могли бы вы детальнее расказать, для чего для каждого разработчика свой репозиторий? Что заставило прийти к такому подходу?
и возможно, такой pipeline возможно тогда будет лучше

build — создаем контейнеры и пушим в Registry
deps — используем созданные контейнеры из Registry
test — используем созданные контейнеры из Registry

Кстати, ведь для тестов вероятно нужны будут зависимости, но так как это другая джоба, то зависимостей не этапе теста нет. Тут наверное нужно объеденить deps и test в одну джобу?
правильно ли я понял, что мы не можем тут провести тесты, которым требуется DataBase?
мне кажется, что лучше на job-ах deps:php-composer и test:phpunit лучше использовать реальный php контейнер. Ведь если мы добавим в composer.json зависимость, которому будет необходим какой то экстеншн то тесты на зависимость уже не пройдут. Та же ситуация с phpunit, но тут еще и настройки php добавляются.
Актуальная тема! Спасибо!

Скажите, используете ли вы проверку кода (CodeSniffer)? Как вы считаете, уместно ли проверять код именно тут. Ведь на сколько я понимаю, если код не прошел проверку, то его просто вообще нельзя запушить на сервер.
Поправте плз текст ссылки

С инструкцией по установке GitLab CI Runner можно ознакомиться на сайте docs.docker.com.
можно и так, только для чего? вопрос не полон.
Kandy, ваш вариант тоже предполагает что набор фильтров может быть динамическим, и с любым количеством?
Спасибо за вопрос. Он меня натолкнул на размышление. Вообще я не гуру, и даже не спец SQL. Просто данное решение работает очень быстро. Что мне собственно и нужно. Хотелось бы все знать, но увы. Человеческий ресурс.

Вопрос к знатокам.

Делаю запрос, поле filters, которое как помним INTEGER[].
SELECT * FROM products WHERE filters @> ARRAY[7267]

Если индекса, нет
Seq Scan on public.products  (cost=0.00..20.38 rows=1 width=68)
  Output: id, title, filters
  Filter: (products.filters @> '{7267}'::integer[])

Индекс, GIST (gist__int_ops)
Index Scan using products_idx on public.products  (cost=0.14..8.16 rows=1 width=68)
  Output: id, title, filters
  Index Cond: (products.filters @> '{7267}'::integer[])


Индекс, GIN (gin__int_ops)
Bitmap Heap Scan on public.products  (cost=8.01..12.02 rows=1 width=68)
  Output: id, title, filters
  Recheck Cond: (products.filters @> '{7267}'::integer[])
  ->  Bitmap Index Scan on products_idx  (cost=0.00..8.01 rows=1 width=0)
        Index Cond: (products.filters @> '{7267}'::integer[])

Не тот ли это битмап, о котором вы спрашиваете?
Вы поняли верно.

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

Если магазин токовый, то набор фильтров для определенной категории, тщательно продумывается.

Для пользователя гораздо легче просто кликнуть чем думать о том что указать. Тем более если он не в теме.
ползунки не получится.
Если взять в пример, хотлайн или фотос, то там фильтр это запись в бд. Это может быть range или нет, это вообще не важно. Фильтр для товара, на уровне базы, это просто метка. На проекте где я реализовал такой поход, есть дополнительные обработчики, которые определяют в какой фильтр должен входить товар и автоматически назначают его.
Я не спорю в целом. А конкретно в данном случае, фильтры это записи в таблице. т.е. у них есть ID:INTEGER.
Поиск по инту быстрее чем по строке, пусть и полнотекстовым поиском со всеми умными индексами.

а что до «какие значения фильтров есть у найденных товаров?», ну тут мы тоже имеем айдишки на выходе.

Информация

В рейтинге
Не участвует
Откуда
Новая Каховка, Херсонская обл., Украина
Дата рождения
Зарегистрирован
Активность