Size: a a a

NestJS — русскоязычное сообщество

2020 March 15

LK

L K in NestJS — русскоязычное сообщество
Andrey Melikhov
нет смысла выделять больше одного ядра на поток
ибо будет context switching а это очень дорогая операция
переключение между потоками
источник

AM

Andrey Melikhov in NestJS — русскоязычное сообщество
сложно — нужно паковать процесс в контейнер и прибивать ядро к контейнеру. Не факт что ты после этого будешь утилизировать все ресурсы системы на 100%
источник

AM

Andrey Melikhov in NestJS — русскоязычное сообщество
если жить без контейеров то проще по стандартной схеме — количество воркеров = ядра - 1
источник

DB

Dilame Bowzee in NestJS — русскоязычное сообщество
Когда мы говорим про процессор, мы подразумеваем ядро процессора?
источник

AM

Andrey Melikhov in NestJS — русскоязычное сообщество
да
источник

LK

L K in NestJS — русскоязычное сообщество
Dilame Bowzee
Почему максимум можно выделить 1 процессор? Почему это сложно? И в чем на самом деле вопрос?
вопрос в том что это нафиг не нужно в наше время когда просто скейлишь VM

пробелма появляется только тогда когда ты хочешь выжать полностью всю мощу с железки
тогда начинают для отдельных процессов выделять отдельные CPU
что бы только 1 процесс использовал конкретные CPU и никто больше
полная утилизация
источник

DB

Dilame Bowzee in NestJS — русскоязычное сообщество
Тогда все встало на места)
источник
2020 March 16

S

Sviatoslav in NestJS — русскоязычное сообщество
А как вам такое, Илоны Маски, интерактивная cli, для установки, удаления, обновления, невероятных, сногсшибательных, умопотрясающих звездонедооцененных nestjs модулей
npx nestjs-modules
https://github.com/svtslv/nestjs-modules
источник

AM

Andrey Melikhov in NestJS — русскоязычное сообщество
зачем?
источник

S

Sviatoslav in NestJS — русскоязычное сообщество
Andrey Melikhov
зачем?
Сам не знаю, просто написалось😂
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
Sviatoslav
Товарищи комьюнити, есть спорный вопрос, давайте по рассуждаем, написал модуль для nodemailer, как полагается без зависимостей, понятное дело, что к нему практически всем нужен handlebars, вот не знаю как поступить, заставлять всех его скачивать, даже тем кому он не нужен, или воспользоваться старым импортом? Ну вот как пример https://github.com/svtslv/nestjs-mailer/blob/master/src/mailer.features.ts
А если я хочу юзать ejs или что-то ещё ?
источник

S

Sviatoslav in NestJS — русскоязычное сообщество
Vlad Krokhin
А если я хочу юзать ejs или что-то ещё ?
Вот потому я и спрашивал, сделать барса через рекваир или обьязательным
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
    NodemailerModule.forRootAsync({
     from: configInstance.email.from,
     host: configInstance.email.host,
     port: configInstance.email.port,
     auth: {
       user: configInstance.email.auth.user,
       pass: configInstance.email.auth.pass,
     },

     templatesPath: path.join(__dirname, '..', 'email-templates'),
     renderStrategy: new EjsStrategy(),
     useTestAccount: configInstance.email.testMode,
   }),

import * as ejs from 'ejs';
import { RenderStrategyInterface } from '../interfaces';

export class EjsStrategy implements RenderStrategyInterface {
 async render(templatePath: string, context?: any): Promise<string> {
   return ejs.renderFile(templatePath, { context });
 }
}

import * as path from 'path';
import { Injectable, Inject } from '@nestjs/common';
import { SentMessageInfo, Transporter, SendMailOptions, getTestMessageUrl } from 'nodemailer';
import { NODEMAILER_OPTIONS, NODEMAILER_TRANSPORT } from './constants';
import { NodemailerAsyncOptions } from './interfaces';

@Injectable()
export class NodemailerService {
 private lastEmail: SendMailOptions = null;

 constructor(
   @Inject(NODEMAILER_OPTIONS)
   private readonly options: NodemailerAsyncOptions,
   @Inject(NODEMAILER_TRANSPORT) private readonly nodemailer: Transporter,
 ) {}

 getLastEmail() {
   return this.lastEmail;
 }

 getTestMessageUrl(info: SentMessageInfo) {
   return getTestMessageUrl(info);
 }

 async send(options: {
   templateName: string;
   to: string;
   context?: any;
   subject?: string;
 }): Promise<SentMessageInfo> {
   const templatePath = path.join(
     this.options.templatesPath,
     options.templateName,
   );

   const email = await this.options.renderStrategy.render(
     templatePath,
     options.context,
   );

   const emailOptions: SendMailOptions = {
     to: options.to,
     html: email,
     subject: options.subject,
   };
   // Store last email for E2E tests
   this.lastEmail = emailOptions;

   return this.nodemailer.sendMail(emailOptions);
 }
}
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
я у себя вынес это в стратегию
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
как в passportjs, бери интерфейс и реализовуй рендер темплейтов
источник

S

Sviatoslav in NestJS — русскоязычное сообщество
Vlad Krokhin
я у себя вынес это в стратегию
У меня это вынесено в отдельную функцию, которая никак не влияет на сам нодемейлер
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
но у тебя в модуле можно написать кастомный рендерд шаблонов ?
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
    NodemailerModule.forRootAsync({
     from: configInstance.email.from,
     host: configInstance.email.host,
     port: configInstance.email.port,
     auth: {
       user: configInstance.email.auth.user,
       pass: configInstance.email.auth.pass,
     },

     templatesPath: path.join(__dirname, '..', 'email-templates'),
     renderStrategy: new EjsStrategy(),
     useTestAccount: configInstance.email.testMode,
   }),
источник

VK

Vlad Krokhin in NestJS — русскоязычное сообщество
я могу взять твой модуль и сделать рендер через ejs или что-то другое ?
источник

DZ

Dmitry Zakharov in NestJS — русскоязычное сообщество
кто-нить бы гайдик написал
источник