Задать вопрос
  • Почему функция возвращает None?

    shurshur
    @shurshur
    Onigire, ещё один способ выйти из функции - это когда её исполнение доходит до последней строчки функции. Если там не будет сделан return какого-то значения, то функция вернёт None.
  • Почему функция возвращает None?

    shurshur
    @shurshur
    Onigire, если условие всегда выполняется, что оно делает в коде? Разумеется, оно выполняется не всегда, цикл завершается и функция доходит до конца, где нет return.
  • Можно ли в теории запустить тг бота через сервера дискорда?

    shurshur
    @shurshur
    Zura_aps, если есть желание заниматься этой темой, рано или поздно придётся завести себе хоть какой-то хостинг. И это не такие огромные деньги, на пиво с фисташками больше уходит.
  • Как можно улучшить код отображения даты выпуска новости?

    shurshur
    @shurshur
    ThunderCat, а когда захочется тем же кодом поддерживать узбеков, финнов и каталанцев, то сразу же станет понятно, насколько неудобны рукодельные реализации для решения такиз задач.
  • Как исправить ошибку No module?

    shurshur
    @shurshur
    Mr.Robot, теперь

    current_dir = /home/user/python/flaskr/web/live
    dirname(current_dir) = /home/user/python/flaskr/web

    Нужно ещё один раз на уровень выше взять и получится как надо.
  • Ошибка User not found в aiogram. Как исправить?

    shurshur
    @shurshur
    user_id=callback_query.message.chat.id

    Почему chat.id? id пользователя равен id чата только в приватах с ботом - и то я настоятельно рекомендую на это не ориентироваться, потому что chat_id и user_id прям по своей задумке это разные вещи.
  • Нужно написать загадку используя python. Где я сделал ошибку?

    shurshur
    @shurshur
    Вообще-то условие s != 'близнецы' or s != 'Близнецы' всегда истинно, поэтому цикл никогда не завершится.
  • Как исправить ошибку No module?

    shurshur
    @shurshur
    Mr.Robot, в изначальной версии вопроса было не так.
  • Как увидеть всё значение в поле Pubkey в wireshark?

    shurshur
    @shurshur
    Например, скопировать через ПКМ значение в буфер.
  • Python playwright, как работать с несколькими страницами асинхронно?

    shurshur
    @shurshur
    EnotShow, чтобы асинхронность ускоряла работу приложения, нужно, чтобы в ней было много ввода вывода и как следствие переключений асинхронных задач. Если там много процессорно-ориентированного кода и не происходит ввода-вывода, то это не поможет. Вообще, надо понимать, что в asyncio всё выполняется в один поток, там нет никакого настоящего параллелизма, и "ускорение" заключается в том, что одни задачи могут выполняться в то время, когда другие ожидают ввода-вывода (по сети, в локальные файлы итд). То есть это хороший механизм, но он предназначен лишь для определённого класса задач.

    Если parse_item берёт содержимое страницы и пытается его анализировать, то никакого ввода-вывода в это время не происходит. И если этот процесс упирается в 100% процессора, то даже расставлять внутри asyncio.sleep(0) (который по сути форсирует переключение задач, что иногда помогает) бессмысленно - всё равно в один поток будет работать.
  • Как в ubuntu ext4 узнать размер кластера?

    shurshur
    @shurshur
    pfg21, неправда, tune2fs работает даже с файлами, содержащими внутри файловую систему.
  • Как узнать причину падения monit?

    shurshur
    @shurshur
    WebforSelf, может и не память. Хотя довольно логичное предположение, что обычно ему нет проблем с памятью, а потом вжух! - и за минуту память вся кончается, процесс умирает, появляется много свободной памяти.

    Надо логи читать, возможно там что-нибудь есть о причинах его падения.
  • Как в именах файлов и папок заменить все пробелы на _?

    shurshur
    @shurshur
    Скорее всего на внешнем харде какой-нить exfat, а в проблемном файле например бэкслеш в имени, который там не разрешён. Тут только выяснять, на каком именно файле падает, и его переименовывать.

    Вариант - запаковать файлы в архив и его положить на хард. Но распаковка на винде всё равно вызовет проблемы.
  • Как сделать платную подписку для дискорд бота?

    shurshur
    @shurshur
    xXx_Unity_xXx, когда занимаешься легальным бизнесом, достаточно естественно создавать юрлицо и платить налоги.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, а, прочитал тот вопрос ещё раз и написал туда в комментарии.
  • Как импортировать бэкап в mongo?

    shurshur
    @shurshur
    Владимир,
    в Dockerfile есть два способа передать переменную окружения:

    ARG - переменная передаётся на этапе сборки;
    ENV - переменная передаётся в создаваемый на базе собранного образа контейнер.

    Если надо что-то передать на этапе сборки, то следует использовать ARG.

    Что касается исхождной ошибки, скорее всего, контейнера с id b2fb5a13f4d8 сейчас не существует. Я бы посмотрел в вывод docker ps, возможно у него другой id сейчас. И вообще, часто удобнее обращаться к контейнерам по именам.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, посмотрел, не очень понимаю в js, process.env это переменные окружения текущего процесса? Скорее всего, надо было их передать правильно в контейнер. Самое простое - записать их в файл, а в docker-compose.yml добавить в env_file.

    env_file:
      - path/to/my.env


    Я сам раздаю статику отдельной нодой


    Тем не менее, вряд ли нода раздаёт статику так же быстро и эффективно, как nginx, который 20 лет писали на C и затачивали под самые высоконагруженные проекты.

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

    Это если настраивает не такой как я


    Если у вас там серьёзный проект, то настраивать прод будет не js-программист, а опытный админ. Но даже так, обычно почти не нужно ничего менять из дефолтных значений в типовом конфиге, кроме специальных случаев типа вебсокетов. Которые обычно по гуглу настраиваются вполне приемлемо и дальше годами используются без изменений. Я сам никогда этого не помню и лезу в гугл.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, как именно используется process.env?

    То есть я могу собрать проект один раз, изменить докер файл ссылаясь на него, а не на node:16 например и у меня не будет заниматься место?


    Не совсем. Каждый образ имеет "слоёную" файловую систему, где в каждом слое лежат какие-то файлы (или информация об их удалении), итоговый образ составляется из этих слоёв, а конкретный контейнер - это ещё один слой поверх слоёв образа. Поэтому если создать много контейнеров из одного образа, то они по сути будут занимать столько места, сколько в них файлов, отличающихся от базового образа (конечно же, туда добавятся и некоторые небольшие организационные расходы).

    Для реализации слоёной файловой системы изначально в докере использовалась aufs2, файловая система с исторически тяжёлой судьбой и всяческими глюками. Сейчас же по умолчанию используется overlayfs, хотя можно использовать и другие storage driver.

    Если образ делается из node:16, то содержимое node:16 на диске хранится один раз. Если в наших проектах есть ндцать модулей, которые используются во всех приложениях, то можно сделать свой базовый образ как потомок node:16, в который будут заранее установлены основные зависимости, тогда дочерние образы приложений могут занимать меньше места, а их сборка сократится, благодаря тому, что общие модули установлены в базовый образ заранее.

    Вообще, можно на досуге полазать по /var/lib/docker (естественно, ничего трогать там не надо, только смотреть!) и поизучать вывод docker inspect по конкретным образам и контейнерам. Может немножко улучшить понимание того, как это всё устроено. А ещё в выводе команды mount можно увидеть смонтированные слоёные файловые системы...

    Нельзя поднять ноду или докер без него?


    Технически можно. Но практически общепринято проксировать через nginx или какой-либо ещё прокси (haproxy, envoy итд). На то есть несколько соображений:

    1. Можно раскидать запросы по разным приложениям, как для масштабирования/отказоустойчивости, так и для функционального деления (например, запросы /auth обрабатывает одно приложение, а запросы /news другое).

    2. Удобнее обслуживать https с сертификатами.

    3. nginx эффективен для раздачи статики.

    4. nginx очень хорошо написан, его труднее заDOSить или взломать.

    5. Сам по себе nginx требует весьма мало ресурсов, поэтому его использование не даёт практически никаких накладных расходов.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, если речь о том, что в контейнере не видно файлов в текущем каталоге, то это более чем логично, ведь на самом деле для сборки докер создаёт временные контейнеры, внутри которых выполняет все инструкции сборки из Dockerfile. Естественно, внутри этих временных контейнеров своя собственная файловая система, которая наследуется от базового образа и затем поэтапно по мере сборки наполняется файлами через инструкции типа RUN, COPY, ADD.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир,
    как понять на базе?


    Допустим, мы берём любой базовый образ, например, ubuntu, и делаем на его базе свой образ с нужным нам софтом. Например:

    FROM ubuntu
    RUN apt-get -y update && apt-get install nodejs && rm -rf /var/cache/apt/*


    (Зачем мы объединяем команды и удаляем кэш я думаю должно быть понятно из предыдущего комментария)

    Соберём этот образ:

    docker build -t my-base:v0.1 -f Dockerfile.my-base .


    Но в целом можно поискать готовый базовый образ с нужной версией node.js в докерхабе. Заодно почитать Dockerfile, чтобы посмотреть, как другие делают.

    Затем в других образах мы можем использовать этот:

    FROM my-base:v0.1
    ADD my_app /app
    WORKDIR /app
    RUN npm install library1 dependency2
    COMMAND node /app/main.js


    Если мы сделаем 10 таких образов с разными приложениями, то их обшая часть - базовый образ - будет одна и та же и не будет занимать отдельного места.

    Можно делать ещё больше разнообразия. Например, пусть у нас часть образов работают с базой данных Oracle. Для этого придётся затащить в образ библиотеки Oracle InstantClient, которые довольно здоровые, да и замороченно их устанавливать каждый раз. Поэтому мы можем сделать образ my-oracle-base, в котором они заранее установлены, чтобы на его базе делать образы приложений, которым нужен доступ к Oracle. Примерно так:

    FROM my-base:v0.1
    RUN apt-get update && apt-get install -y libaio1 wget unzip \
        && wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip \
        && unzip instantclient-basiclite-linuxx64.zip \
        && rm -f instantclient-basiclite-linuxx64.zip \
        && cd /opt/oracle/instantclient* \
        && rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci \
        && echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig \
        && npm install oracledb


    (Рецепт установки instantclient подсмотрен тут)

    Это всё просто небольшие примеры, я всё же советую воспользоваться советом из решения ниже и немного изучить основы вкупе с best practices. Это улучшит понимание, ипоможет грамотнее организовать разработку и сборку.