Дт экто: ЛУКОЙЛ — ЭКТО Дизель

Содержание

Нефтяночка — мобильная АЗС

Звонок бесплатный

Вход

В течение 40 минут
в удобное для вас место
по цене ниже АЗС

ДТ экто ПТФ -15

53. 50 Р

  • Минимальный заказ от 20.00 л.
  • Доставка с 08:30 до 19:30 часов по городу и району

3 шага и


полный бак
  • Оставьте заявку на сайте, по телефону или через приложение
  • Выберете местоположение автомобиля и оставьте лючок бензобака открытым
  • Нефтяночка заправит авто, пока вы занимаетесь своими делами

С нами Вы:

не будете тратить время, стоя в очереди на АЗС

Лучше уделите время любимым)

не будете переплачивать

Сэкономьте и побалуйте себя чашкой ароматного кофе

не будете бегать с канистрами

Лучше пробегите кросс

Гарантии

  • Мобильные АЗС заправляются на нашей собственной нефтебазе, где топливо подвергается тщательной проверке на качество
  • Опломбированные емкости внутри мобильной АЗС защитят от разбавления топлива
  • Убедитесь в качестве топлива, заказав проверку перед заправкой

Сертификаты на топливо

Заправьтесь на 30 л и получите чашку кофе в подарок!

Мы готовы сотрудничать, пишите нам на почту: [email protected]

Заказать топливо

Ваш город Кемерово?

Изменить город

КемеровоБеловоОкунево

Что такое ЭКТО дизельное топливо?

Первой компанией, которая у нас в России стала производить бензины ЭКТО, является «Лукойл». Дизтопливо марки ЭКТО отвечает стандарту качества принятому в европейских странах, отличается повышенными эксплуатационными и экологическими характеристиками. Дизтопливо марки ЭКТО появилось в России в 2015 году.

Производится оно на основе солярки ЕВРО 5. Идеально подходит для авто любых марок и категорий использующих дизельное топливо. Понятно, что если европейским дизельным ДВС оно не может навредить, то наши двигатели, рассчитанные на менее качественное горючее, ЭКТО дизтопливо точно не испортит. Даже улучшит качество их работы.

Дизельное топливо марки ЭКТО без преувеличения можно назвать топливом будущего!

Рассмотрим основные преимущества ЭКТО дизтоплива в сравнении с обычной соляркой.

  • Процесс сгорания проходит значительно лучше.
  • Все заявленные свойства и характеристики совпадают с реально имеющимися.
  • Увеличивается срок эксплуатации двигателя.
  • Меньший шум при работе мотора.
  • Вибрация также меньше.
  • Двигатель легче запускается и быстрее переходит в рабочий режим.
  • Возросла длительность эксплуатации машинного масла.
  • Сокращён расход ДТ.
  • Беспроблемное функционирование бортовой диагностики.

С целью улучшения характеристик эксплуатации ДВС в ЭКТО дизтопливо внедрены очищающие и антикоррозионные добавки. Они обеспечивают

  • Чистку форсунок от возникающих в них отложений.
  • Предотвращение коррозионных образований.
  • Качественную, стабильную работу форсунок касательно распыления.
  • Уменьшают вспенивание горючего, что позволяет быстрее заправлять автомобиль, снижает риск перелива ДТ.
Об экологических характеристиках ЭКТО дизтоплива

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

По данным от сертифицированного европейского центра исследований, дизельное ЭКТО топливо по целому ряду показателей превышает нормы рекомендации Всемирной топливной хартии. По качеству оно сравнимо лишь с топливом ведущих мировых производителей.

Адреса АЗС, цены

№01 «Заводская» Кемеровская область, г. Новокузнецк, Заводской р-н, ш. Заводское, 30 Кемеровская область, г. Новокузнецк, Заводской р-н, ш. Заводское, 30 Круглосуточно
№02 «Подобас» Кемеровская область, г. Мыски, в 200 м. северо-западнее артезианской скважины № 807 Кемеровская область, г. Мыски, в 200 м. северо-западнее артезианской скважины № 807 Круглосуточно
№03 «Сосновка» Кемеровская область, Новокузнецкий район, в районе с. Сосновка
Кемеровская область, Новокузнецкий район, в районе с. Сосновка
Круглосуточно
№04 «Зенково» Кемеровская область, г. Прокопьевск, ул. Главная,135 Кемеровская область, г. Прокопьевск, ул. Главная,135 Круглосуточно
№05 «Строителей» Кемеровская область, г. Прокопьевск, пр. Строителей, 8а Кемеровская область, г. Прокопьевск, пр. Строителей, 8а Круглосуточно
№06 «Шоссе» Кемеровская область, г. Новокузнецк, Заводской район, ш. Пойменное, 24
Кемеровская область, г. Новокузнецк, Заводской район, ш. Пойменное, 24 Круглосуточно
№07 «Абагур» Кемеровская область, г. Новокузнецк, ш. Притомское, 15 Кемеровская область, г. Новокузнецк, ш. Притомское, 15 Круглосуточно
№08 «Транспортная» Кемеровская область, г. Новокузнецк, ул. Траспортная, 61б Кемеровская область, г. Новокузнецк, ул. Траспортная, 61б Круглосуточно
№09 «Осинники» Кемеровская область, г. Осинники, ул. Магистральный проезд, 18 Кемеровская область, г. Осинники, ул. Магистральный проезд, 18 Круглосуточно
№10 «Таштагол» Кемеровская область, г. Таштагол, ул. Поспелова, д.30 Кемеровская область, г. Таштагол, ул. Поспелова, д.30 Круглосуточно
№11 «Междуреченск» Кемеровская область, г. Междуреченск в районе ул. Весенняя и ул. Кузнецкая Кемеровская область, г. Междуреченск в районе ул. Весенняя и ул. Кузнецкая Круглосуточно
№12 «Туркменская» Кемеровская область, г. Новокузнецк, Туркменская, дом 54а Кемеровская область, г. Новокузнецк, Туркменская, дом 54а Круглосуточно
№13 «Радуга» Кемеровская область, г. Кемерово, Рудничный район, пр. Шахтеров Кемеровская область, г. Кемерово, Рудничный район, пр. Шахтеров Круглосуточно
№14 «Белово» Кемеровская область, г. Белово, ул. Ленина, 1 Кемеровская область, г. Белово, ул. Ленина, 1 Круглосуточно
№15 «Ленинск (справа)» Кемеровская область, Ленинск-Кузнецкий район, автотрасса Ленинск-Кузнецкий-Прокопьевск-Новокузнецк 5 км (справа) Кемеровская область, Ленинск-Кузнецкий район, автотрасса Ленинск-Кузнецкий-Прокопьевск-Новокузнецк 5 км (справа) Круглосуточно
№16 «Ленинск (слева)» Кемеровская область, Ленинск-Кузнецкий район, автотрасса Ленинск-Кузнецкий-Прокопьевск-Новокузнецк 5 км (слева) Кемеровская область, Ленинск-Кузнецкий район, автотрасса Ленинск-Кузнецкий-Прокопьевск-Новокузнецк 5 км (слева) Круглосуточно
№17 «Химиков» Кемеровская область, г. Кемерово, западнее пересечения пр. Химиков и ул. Терешковой Кемеровская область, г. Кемерово, западнее пересечения пр. Химиков и ул. Терешковой Круглосуточно
№18 «Обнорского» Кемеровская область, г. Новокузнецк, Кузнецкий район, ул. Обнорского, 77 Кемеровская область, г. Новокузнецк, Кузнецкий район, ул. Обнорского, 77 Круглосуточно
№19 «Димитрова» Кемеровская область, г. Новокузнецк, Куйбышевский район, ул. Димитрова, 42 Кемеровская область, г. Новокузнецк, Куйбышевский район, ул. Димитрова, 42 Круглосуточно
№20 «Анжеро-Судженск» Кемеровская область, г. Анжеро-Судженск, ул. Пушкина, 18 Кемеровская область, г. Анжеро-Судженск, ул. Пушкина, 18 Круглосуточно
№21 «Мариинск» Кемеровская область, г. Мариинск, ул. Котовского, 32 Кемеровская область, г. Мариинск, ул. Котовского, 32 Круглосуточно
№23 «121 км» Кемеровская область, Прокопьевский район, 121 км автодороги Междуреченск-Новокузнецк-Ленинск-Кузнецкий Кемеровская область, Прокопьевский район, 121 км автодороги Междуреченск-Новокузнецк-Ленинск-Кузнецкий

ДТ Межсез

54.00 р

Круглосуточно
№24 «Красноармейская» Кемеровская область, г. Кемерово, Заводский район, южнее пересечения ул. Красноармейская и ул. 4-й участок Топкинского лога Кемеровская область, г. Кемерово, Заводский район, южнее пересечения ул. Красноармейская и ул. 4-й участок Топкинского лога Круглосуточно
№25 «Кузедеево» Кемеровская область, п.г.т. Кузедеево Кемеровская область, п.г.т. Кузедеево Круглосуточно
№26 «Орджоникидзе» Кемеровская область, г. Новокузнецк, ул. Орджоникидзе,1а Кемеровская область, г. Новокузнецк, ул. Орджоникидзе,1а

ДТ Межсез

54.00 р

Круглосуточно
№27 «Бызово» Кемеровская область, г. Новокузнецк, шоссе Бызовское, 29 Кемеровская область, г. Новокузнецк, шоссе Бызовское, 29 Круглосуточно
№28 «Водник» Кемеровская область, г. Новокузнецк, ул. Транспортная, 91а Кемеровская область, г. Новокузнецк, ул. Транспортная, 91а Круглосуточно
№29 «Ольжерасская» Кемеровская область, г. Междуреченск, р-н Ольжерасской автобазы, строение 16 Кемеровская область, г. Междуреченск, р-н Ольжерасской автобазы, строение 16 Круглосуточно
№30 «Ильинское» Кемеровская область, г. Новокузнецк, Новоильинский район, шоссе Ильинское, 47 Кемеровская область, г. Новокузнецк, Новоильинский район, шоссе Ильинское, 47 Круглосуточно
№31 «Космическая» Кемеровская область, г. Новокузнецк, шоссе Космическое, 24 Кемеровская область, г. Новокузнецк, шоссе Космическое, 24

ДТ Межсез

54.00 р

Круглосуточно
№32 «Мариинская» Кемеровская область, г. Кемерово, Рудничный район, юго-западнее комплекса строений №2 по ул. Мариинской Кемеровская область, г. Кемерово, Рудничный район, юго-западнее комплекса строений №2 по ул. Мариинской Круглосуточно
№33 «Вахрушева» Кемеровская область, г. Кемерово, юго-западнее комплекса строений № 14 по ул. Вахрушева Кемеровская область, г. Кемерово, юго-западнее комплекса строений № 14 по ул. Вахрушева

ДТ Межсез

54.00 р

Круглосуточно
№34 «Тухачевского» Кемеровская область, г. Кемерово, ул. Тухачевского, 85 Кемеровская область, г. Кемерово, ул. Тухачевского, 85

ДТ Межсез

54.00 р

Круглосуточно
№35 «Журавлево» Кемеровская область, Промышленновский район, 50м от с. Журавлево Кемеровская область, Промышленновский район, 50м от с. Журавлево

ДТ Межсез

54.00 р

Круглосуточно
№36 «Прокопьевск» Кемеровская область, г. Прокопьевск, пр. Шахтеров, 18 Кемеровская область, г. Прокопьевск, пр. Шахтеров, 18 Круглосуточно
№37 «Шевцовой» Кемеровская область, г. Ленинск-Кузнецкий, ул. Шевцовой, 19 Кемеровская область, г. Ленинск-Кузнецкий, ул. Шевцовой, 19 Круглосуточно
№38 «Юрга» Кемеровская область, г. Юрга, ул. Московская, 129 Кемеровская область, г. Юрга, ул. Московская, 129 Круглосуточно
№39 «Текстильщиков» Кемеровская область, г. Ленинск-Кузнецкий, пр. Текстильщиков, 17 Кемеровская область, г. Ленинск-Кузнецкий, пр. Текстильщиков, 17

ДТ Межсез

54.00 р

Круглосуточно
№40 «Лапландия» Кемеровская область, г. Кемерово, Октябрьский проспект, юго-западнее здания 34 Кемеровская область, г. Кемерово, Октябрьский проспект, юго-западнее здания 34 Круглосуточно
№41 «Советская» Кемеровская область, г. Кемерово, ул. Советская, 14 Кемеровская область, г. Кемерово, ул. Советская, 14 Круглосуточно

Дизельное Топливо Лукойл коды ТН ВЭД (2020): 2710194220, 2710194240, 2710194210

Топливо дизельное ЭКТО Diesel зимнее, класс 3 (ДТ-З-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel межсезонное, сорт Е (ДТ-Е-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel зимнее, класс 1 (ДТ-З-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel, межсезонное, сорт F (ДТ-Е-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel арктическое, класс 4 (ДТ-А-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194230
Топливо дизельное ЛУКОЙЛ АРКТИК, минус 50 (ДТ-А-К5 2710
топливо дизельное ЭКТО Diesel зимнее, класс 3 (ДТ-З-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel межсезонное, сорт F (ДТ-E-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel межсезонное, сорт F (ДТ-E-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel зимнее, класс 2 (ДТ-З-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel межсезонное, сорт F (ДТ-E-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel зимнее, класс 3 (ДТ-З-К5) по СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel зимнее, класс 2 (ДТ-З-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Топливо дизельное ЭКТО Diesel зимнее, класс 3 (ДТ-З-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194220
Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5), СТО ЛУКОЙЛ 1.24.2-2017, 2710194210
Дизельное топливо ДТ-Л-К5: Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194210
Дизельное топливо ДТ-Е-К5: Топливо дизельное ЭКТО Diesel межсезонное, сорт Е (ДТ-Е-К5), СТО ЛУКОЙЛ 1.24.2-2017 2710194240
Топливо дизельное ЭКТО Diesel зимнее, класс 1 (ДТ-З-К5), СТО ЛУКОЙЛ 1.24.2-2017, 2710194220
Дизельное топливо ДТ-Л-К5 (Топливо дизельное ЭКТО Diesel летнее, сорт С (ДТ-Л-К5), СТО ЛУКОЙЛ 1.24.2-2017) 2710194210

можно ли добавлять присадки в дизельное топливо и отзывы об их использовании

Эксплуатация дизельных двигателей вызывает множество трудностей, не свойственных бензиновому брату. Для сохранения свойственных силовой установке показателей необходимо тщательно подходить к обслуживанию и апгрейду топливной системы. Стоит присмотреться и к качеству солярки.

Основное отличие дизельного топлива от высокооктанового состава: удельная теплота сгорания тяжелой эмульсии

Взглянув на циклы работы двигателей, работающих на разных продуктах нефтеперегонки, можно обнаружить существенное различие. Подвод теплоты в цикле Дизеля осуществляется при постоянном давлении, что гарантирует высокий показатель крутящего момента уже на низких оборотах коленчатого вала. В диаграмме Отто, согласно которой трудится бензиновый агрегат, аналогичный процесс осуществляется при постоянном объеме, чем обуславливается хорошая динамика в любом диапазоне.

А вот удельная теплота сгорания дизельного топлива составляет 42,7 МДж/кг. У бензина же количество тепла, выделяющееся при полном сгорании 1 кг – 44 МДж/кг. Следовательно, у последнего должен быть выше удельный расход топлива и, как следствие, КПД. Однако все знают, что на деле совсем наоборот – дизель экономичнее.

Причина кроется в условиях, при которых могут раскрыть потенциал указанные составы. Эффективность ДВС, работающего по циклу Дизеля, выше, поскольку величина полезной работы по этой диаграмме составляет более высокий процент. Но на практике идеальное рабочее тело создать трудно. Однако дизельное топливо Евро 5 и его характеристики дают возможность приблизить действительные рабочие параметры к теоретическим.

Очень важно! Никогда не следует заливать в бак вместо солярки бензин. Он обладает низким цетановым числом и способен быстро вывести из строя мотор, в дальнейшем не подлежащий ремонту.

Цель применения фильтра-сепаратора в системе подачи дизельного топлива?

Строение магистрали снабжения двигателя, работающего на тяжелой смеси, включает следующие элементы:

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

Далее, в зависимости от конструкции впрыска, либо топливная рампа, либо непосредственно форсунки.

Для того, чтобы осуществлять грубую фильтрацию, необходим фильтр-сепаратор для дизельного топлива, основными функциями которого являются:

  • удаление воды из эмульсии;
  • дефектация крупных частиц.

Этот элемент довольно часто меняется и реализуется в различных модификациях. В качестве альтернативы, обуславливающей стабильный пуск в холодное время, применяют подогрев «грубого» очистителя.

Основные характеристики дизельного топлива и их регламентация согласно стандарту Евро 5

Важным показателем солярки является цетановое число, оно характеризует то, как двигатель быстро запустится и нагреется. К тому же, число влияет на эффективность работы силовой установки. Цифровой регламент приближается к отметке 55. Барьер, согласно стандарту, составляет 51 единицу.

Вредный, но все же присутствующий компонент – это сера. Согласно характеристикам дизельного топлива марки Евро 5, ее содержание должно быть не выше 10 мг/кг. Превышение этого уровня может отразиться на:

  • кислотности отработавших газов;
  • работе выхлопной системы;
  • коррозионной стойкости элементов.

Критическое содержание серы сокращает ресурс таких деталей:

  • форсунок;
  • катализатора;
  • поршневых колец;
  • рабочих поверхностей ТНВД;
  • подшипников.

Норматив регламентирует содержание воды – 200 мг/кг. Но не стоит расслабляться. Концентрация этого химического соединения может быстро повысится в баке в результате неизбежных физических явлений, например, резкого перепада температур. Избавиться от нежелательных компонентов в дизельном топливе можно с помощью положительно охарактеризованных в отзывах присадок.

Повышена непосредственно и энерговооруженность горючего. Теперь его плотность составляет до 845 кг на единицу объема. Это свидетельствует о более высокой экономичности применяемой солярки.

Согласно принятым стандартам, дизельное топливо Евро 5 должно демонстрировать улучшенные характеристики эксплуатационного характера:

  • уменьшенные шум и вибрация;
  • повышенную коррозионную стойкость;
  • облегченный запуск;
  • экологически чистый выхлоп;
  • пониженный удельный расход топлива.

Инновационная продукция компании Лукойл в виде зимнего дизельного топлива: особенности эксплуатационных характеристик

Выпустив на рынок современные дизельные составы «ЭКТО», компания мгновенно повысила свою репутацию. Непосредственными народными экспертами отмечается:

  • отсутствие необходимости применения дополнительного обогрева в случае заправки сертифицированной консистенции ЭКТО Арктика;
  • улучшенная экономичность;
  • отсутствие коррозионных процессов на поверхностях деталей системы;
  • повышенная смазывающая способность топливного состава.

Различные несертифицированные присадки в дизельное топливо отзывы применять не рекомендуют. Потребители объясняют это тем, что все параметры и так уже оптимизированы и удовлетворяют стандарту Евро 5. Желание улучшить его эксплуатационные показатели может обернуться ухудшением заявленных производителем характеристик.

В результате применения «продвинутой» технологии перегонки нефти, инженерам удалось снизить концентрацию парафиновых углеводородов. Именно эти включения непосредственно влияют на процесс кристаллизации и вероятность возникновения проблемы пуска мотора в зимних условиях. Именно поэтому, по отзывам экспертов, применение присадок для этого дизельного топлива нежелательно.

Стоит отметить, что у дизельного топлива ЭКТО Арктика температура предельной фильтруемости составляет минус 32 градуса по Цельсию. Согласно паспорту, парафин начинает кристаллизоваться только при минус 16.

Рекомендуют ли отзывы добавлять в дизельное топливо присадки с различными свойствами?

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

.

Присадки, по заявлению их производителей, имеют целью:

  • повысить цетановое число;
  • снизить температуру помутнения, облегчив зимний пуск;
  • избавить топливо от воды;
  • улучшить смазочные свойства;
  • снизить удельный расход топлива и износ компонентов систем.

Оптимизирующие составы могут улучшать как одновременно все (универсальные), так и часть вышеописанных свойств. Выбирать соответствующий вид следует из соображений качества топлива на АЗС.

Важно! Автолюбители рекомендуют всегда иметь с собой присадку для повышения цетанового числа. Особенно это касается жителей глубинки, где качество горючего оставляет желать лучшего.

Приведенные положительные отзывы рекомендуют использовать присадки для дизельного топлива только известных фирм:

  • Liqui Moly;
  • Castrol;
  • Тотек;
  • SMT;
  • BBF.

Не рекомендуется применять присадки в случае использования дизельного топлива стандарта Евро 5 с улучшенными характеристиками. Объясняется это тем, что диапазон важных параметров имеет небольшой разброс, в отличие от прежних нормативов. Добавив необходимое вещество, можно внезапно повысить вязкость или цетановое число. Это приведет к нестабильной работе двигателя и преждевременному выходу его из строя.

На заметку! Независимо от сезонности используемой солярки, рекомендуется всегда возить с собой присадку под названием «антигель», способную растворить кристаллизованный парафин.

Резюме

В холодную пору года настоятельно рекомендуется использовать зимнее дизельное топливо. Если магистраль топливоподачи не оборудована подогревом – возить с собой соответствующую присадку.

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

Заправки Кирова — Цены на бензин в Кирове, стоимость бензина в Кирове

АЗСАдресАИ80АИ92АИ95ДТ эктоДТУслуги
г. Киров, ул. Солнечная улица, 9
44,5 47,7 49,5
г. Киров, ул. Производственная, 25б
т: +7 (8332) 70-41-56
44,5 47,7 49,5
г. Киров, Автотранспортный переулок, 4
т: +7 (8332) 67-33-66
44,7 47,6 49,6
г. Киров, ул. Московская улица, 176
т: +7 (8332) 44-01-76
44,7 47,6 49,6
г. Киров, ул. Заводская, 9
т: +7 (8332) 35-75-62
44,7 47,6 49,6
г. Киров, ул. Воровского, 107а
т: +7 (8332) 51-02-34
44,7 47,6 49,6
г. Киров, ул. Московская улица, 89
т: +7 (8332) 38-14-37
44,7 47,6 49,6
г. Киров, ул. Советская, 2
т: +7 (8332) 70-63-31
45,77 48,56 50,02
г. Киров, Советский тракт, 40
45,77 48,56 50,02
г. Киров, ул. Потребкооперации, 2
т: +7 (833) 235-90-42
45,77 48,56 50,02
г. Киров, ул. Ленина, 130
т: +7 (8332) 67-33-89
45,77 48,56 50,02
г. Киров, слобода Шамшуровы, ул. Производственная
т: +7 (8332) 62-55-25
45,77 48,56 50,02
г. Киров, Ульяновская, 22а
т: +7 (8332) 46-31-47
45,77 48,56 50,02
г. Киров, ул. Солнечная, 11а
45,77 48,56 50,02
г. Киров, ул. Московская, д. 139
45,77 48,56 50,02
г. Киров, ул. Лепсе, 30а
45,77 48,56 50,02
г. Киров, ул. Карла Маркса, 1
т: +7 (8332) 23-60-67
45,77 48,56 50,02
г. Киров, д. Лянгасы
45,77 48,56 50,02
г. Киров, ул.Пермская, д.37
45,77 48,56 50,02
г. Киров, ул. П. Корчагина, 242
т: +7 (8332) 40-88-88
45,77 48,56 50,02
г. Киров, ул. П. Корчагина, 256 (в Киров)
45,77 48,56 50,02
г. Киров, ул. П.Корчагина, 256 (из Кирова)
45,77 48,56 50,02
г. Киров, ул. П.Корчагина, 55
т: +7 (8332) 40-01-40
44,0 44,0 47,0 49,0
г. Киров, ул. Производственная улица, 28
т: +7 (8332) 40-52-62
44,0 44,0 47,0 49,0
г. Киров, Хлебозаводской проезд, 9
т: +7 (8332) 40-52-62
44,0 44,0 47,0 49,0
г. Киров, Нововятск, ул. Советская, 181
т: +7 (8332) 25-12-92
44,7 47,7 49,7
г. Киров, Советский тракт, д. Чирки
т: +7 (8332) 66-37-45
44,7 47,7 49,7
г. Киров, ул. Ленина, 196
т: +7 (8332) 35-69-60
44,7 47,7 49,7
г. Киров, ул. Щорса, 68а
т: +7 (8332) 66-31-52
44,7 47,7 49,7
г. Киров, ул. Производственная, 21
т: +7 (8332) 66-00-13
44,7 47,7 49,7
г. Киров, ул. Московская, 174
т: +7 (8332) 66-31-88
44,7 47,7 49,7
г. Киров, ул. Московская, 110
т: +7 (8332) 25-30-64
44,7 47,7 49,7
г. Киров, ул. Ломоносова, 1
т: +7 (8332) 25-30-63
44,7 47,7 49,7
г. Киров, село Лянгасы
т: +7 (8332) 66-15-27
44,7 47,7 49,7
г. Киров, ул. Луганская, 47
т: +7 (8332) 25-36-52​
44,7 47,7 49,7
г. Киров, ул. Лепсе, 23
т: +7 (8332) 25-35-63
44,7 47,7 49,7
г. Киров, Октябрьский пр-т 24
т: +7 (8332) 25-12-95
44,7 47,7 49,7
г. Киров, ул. Северное Кольцо 30а
т: +7 (8332) 25-36-41​
44,7 47,7 49,7
г. Киров, село Макарье
т: +7 (8332) 64-32-10
44,7 47,7 49,7
Киров, поворот на Порошино
т: +7 (8332) 66-00-67
44,7 47,7 49,7
г. Киров, ул, П.Корчагина, 88а
т: +7 (8332) 25-30-59
44,7 47,7 49,7
19 км трассы Киров-Котельнич (из Кирова)
т: +7 (8332) 66-01-39
44,7 47,7 49,7
19 км трассы Киров-Котельнич (в Киров)
т: +7 (8332) 55-62-24
44,7 47,7 49,7

«Красноярскнефтепродукт» начал реализацию премиального бензина от ЛУКОЙЛ

АО «Красноярскнефтепродукт» начало продажу в нашем регионе революционного топлива ЭКТО 100 от компании ЛУКОЙЛ. Сегодня КНП является единственным поставщиком этого бензина на территории Восточной Сибири.

В Красноярске стартовали продажи топлива ЭКТО 100 производства компании ЛУКОЙЛ. Первой и пока единственной розничной сетью АЗС, которая реализует эту марку бензина в нашем регионе, стало АО «Красно­ярскнефтепродукт». Инновационное топливо с октановым числом 100 начали производить в России всего полгода назад.

Бензин соответствует экологическому стандарту «Евро-5».

Напомним, что в первых числах сентября гендиректор компании Андрей Чернов в эксклюзивном интервью ДЕЛА.ru говорил, что КНП этой осенью планирует запустить сеть фирменных магазинов по продаже масел ЛУКОЙЛ – павильон уже месяц работает на ул. Республики в Красноярске.

Тогда же Чернов заверил, что в ближайшее время КНП начнет реализацию топлива от ЛУКОЙЛ, в том числе и премиальных марок ЭКТО. И это обещание выполнено! Накануне бензовоз с первой партией топлива компании ЛУКОЙЛ доставил ЭКТО 100 на недавно реконструированную АЗС КНП на ул. Шахтеров.

ЭКТО 100 рекомендовано для применения в атмосферных и турбирован­ных двигателях с требованиями по октановому числу не менее 98 пунктов. Комплексные испытания, проведенные в самом авторитетном в России автомобильном научном центре «НАМИ», подтвердили значительные преимущества бензина ЭКТО 100 по сравнению с топливом АИ-98. Применение этого бензина

способствует увеличению мощности двигателя на 10% и динамики разгона на 7%,

а также снижает расход топлива на 6%.

Увеличение октанового числа достигается за счет уникального компонента – алкилата, который не содержит ароматических соединений и серы (выхлопы в атмосферу минимальны), а также имеет низкое давление насыщенных паров (позволяет сберечь топливную систему машины от преждевременного выхода из строя). Так что даже самых требовательных автомобилистов новинка явно порадует.

Как сказал на торжественном мероприятии, посвященном началу продаж нового топлива, генеральный директор АО «Красноярскнефтепродукт» Андрей Чернов, это один из промежуточных этапов развития компании, который был давно запланирован:

«Сегодня мы с гордостью говорим о том, что нам удалось продолжить сотрудничество с компанией ЛУКОЙЛ. Продукт марки ЭКТО 100 – это чистейший на сегодня бензин.
Конечно, он рассчитан на определенный класс автомобилей. В России можно выделить единичные города, где продукт этой марки вообще представлен. Красноярск тут, безусловно, в числе лидеров.
Мы будем расширять реализацию бензина на ряде наших АЗС, которые находятся на основных магистралях города. Помимо ЭКТО 100 мы представляем сегодня дизельное топливо марки ЛУКОЙЛ. Это тоже по‑своему инновационный продукт на рынке края».

Поскольку бензин ЭКТО 100 предназначен прежде всего для автомобилей премиум-класса, в мероприятии принимали участие представители официального дилера компании Porsche. Гендиректор Порше Центр Красноярск Петр Панфилов сообщил, что московское представительство брэнда давно сотрудничает с компанией ЛУКОЙЛ:

«Испытания показали, что отдача моторов наших спорткаров действи­тельно повышается, люди не зря тратят эти деньги. Нам бы очень хотелось заправляться в Сибири реально качественным топливом, особенно если говорить об автомобилях с мощностью двигателей в 400 л.с. и более».

Сотрудничество КНП с ЛУКОЙЛ будет продолжено. По франшизному соглашению

КНП откроет в Красноярском крае АЗС под маркой ЛУКОЙЛ.

Первая заправка под этим брендом появится в нашем регионе уже в 2018 году.

Как рассказал Андрей Чернов, в Красноярск уже приезжали представители компании, они согласовали потенциальные участки под новые станции и даже выразили готовность софинансировать строи­тельство. Необходимо отметить, что требования ЛУКОЙЛ к строящимся АЗС самые высокие в России. Так что ждем от КНП покорения новых вершин.

 

Фото Алины Ковригиной

ecto_sqlite3 / codec_test.exs на основном сервере · elixir-sqlite / ecto_sqlite3 · GitHub

defmodule Ecto.Adapters.SQLite3.CodecTest do
используйте ExUnit.Case, async: true
псевдоним Ecto.Adapters.SQLite3.Codec
описать «.bool_decode / 1 «до
тест «0» до
{: ok, false} = Codec.bool_decode (0)
{: ok, false} = Codec.bool_decode («0»)
конец
тест «ЛОЖЬ» выполнить
{: ok, false} = Кодек.bool_decode («ЛОЖЬ»)
конец
тест «1» до
{: ok, true} = Codec.bool_decode (1)
{: ok, true} = Codec.bool_decode («1»)
конец
тест «ИСТИНА» сделать
{: ok, true} = Кодек.bool_decode («ИСТИНА»)
конец
конец
описать «.json_decode / 1» до
тест «ноль» до
{: ok, nil} = Codec.json_decode (nil)
конец
тест «действительный json» на
{: ок,% {}} = Кодек.json_decode («{}»)
{: ok, []} = Codec.json_decode («[]»)
{: ок,% {«foo» => 1}} = Codec.json_decode (~ s | {«foo»: 1} |)
конец
тест «обрабатывает искаженный json» до
{: ошибка, _} = кодек.json_decode («»)
{: error, _} = Codec.json_decode («»)
{: error, _} = Codec.json_decode («{«)
{: error, _} = Codec.json_decode («[«)
конец
конец
описать «.float_decode / 1 «до
тест «ноль» до
{: ok, nil} = Codec.float_decode (nil)
конец
тест «целое число» сделать
{: ok, 1.0} = Codec.float_decode (1)
{: хорошо, 2.0} = Codec.float_decode (2)
конец
тест «Десятичный» сделать
{: ok, 1.0} = Codec. decimal} = Кодек.decimal} = Codec.decimal_decode (1.2)
конец
конец
описать «.time_decode / 1» до
тест «ноль» до
{: ok, nil} = Codec.time_decode (nil)
конец
тестовая «строка» сделать
{: ok, time} = время.time} = Codec.time_decode («23: 50: 07.123Z»)
конец
конец
описать «.utc_datetime_decode / 1» до
тест «ноль» до
assert {: ok, nil} = Codec.utc_datetime_decode (nil)
конец
тестовая «строка» сделать
{: ok, dt} = DateTime.dt} = Codec.utc_datetime_decode («2021-08-25 10: 58: 59.111111 + 02: 30»)
конец
конец
конец

Timex Ecto и Timex: поиск и устранение неисправностей

Прошло 5 месяцев с тех пор, как я начал изучать Elixir и Phoenix, и это была отличная поездка. Большая часть опыта была отличной, но иногда я обнаруживаю некоторые проблемы, с которыми трудно справиться.

Некоторое время назад мне нужно было использовать лучшее понятие времени в нашем проекте, и после небольшого исследования я нашел библиотеки Timex и Timex Ecto для Elixir.

Timex помогает со всеми необходимыми операциями со временем, такими как преобразование в единицу времени, вычисление разницы между двумя датами, использование часовых поясов и т. Д. Вы можете ознакомиться со всеми функциями в HexDocs. Timex Ecto применяет эту функциональность к Ecto для использования с базой данных.

После использования этой библиотеки в течение некоторого времени мне нужно было сделать запрос в PostgreSQL, чтобы удалить все строки до определенной даты.Timezone.convert (Timex.now, «Европа / Копенгаген»)) |> Repo.delete_all

Но произошла следующая ошибка:

  [ошибка]
Сервер: localhost: 4000 (http)
Запрос: POST / api / auth / reset
** (выход) возникло исключение:
** (FunctionClauseError) нет соответствия предложения функции в MyApp.PostgresTypes.encode_tuple / 5
(my_app) lib / postgrex / type_module.ex: 717: MyApp.PostgresTypes.encode_tuple ({{{2017, 8, 9}, {22, 44, 59, 175265}}, «Европа / Копенгаген»}, 1, ноль , {MyApp.PostgresTypes, 1638460}, [])
(my_app) deps / postgrex / lib / postgrex / type_module.пример: 717: MyApp.PostgresTypes.Postgrex.Extensions.Record / 3
(my_app) deps / postgrex / lib / postgrex / type_module.ex: 717: MyApp.PostgresTypes.encode_params / 3
(postgrex) lib / postgrex / query.ex: 45: DBConnection.Query.Postgrex.Query.encode / 3
(db_connection) lib / db_connection.ex: 1071: DBConnection.describe_run / 5
(db_connection) lib / db_connection.ex: 1142: анонимный fn / 4 в DBConnection.run_meter / 5
(db_connection) lib / db_connection.ex: 1199: DBConnection.run_begin / 3
(db_connection) lib / db_connection.ex: 584: соединение DB.prepare_execute / 4
(ecto) lib / ecto / adapters / postgres / connection.ex: 80: Ecto.Adapters.Postgres.Connection.prepare_execute / 5
(ecto) lib / ecto / adapters / sql.ex: 243: Ecto.Adapters.SQL.sql_call / 6
(ecto) lib / ecto / adapters / sql.ex: 431: Ecto.Adapters.SQL.execute_and_cache / 7
(my_app) lib / my_app / auth / auth_controller.ex: 162: MyApp.Web.AuthController.reset / 2
(my_app) lib / my_app / auth / auth_controller.ex: 1: MyApp.Web.AuthController.action / 2
(my_app) lib / my_app / auth / auth_controller.ex: 1: MyApp.Web.AuthController.phoenix_controller_pipeline / 2
(my_app) lib / my_app / web / конечная точка.Пример: 1: MyApp.Web.Endpoint.instrument / 4
(феникс) lib / phoenix / router.ex: 277: Phoenix.Router .__ call __ / 1
(my_app) lib / my_app / web / endpoint.ex: 1: MyApp.Web.Endpoint.plug_builder_call / 2
(my_app) lib / plug / debugger.ex: 123: MyApp.Web.Endpoint. ”call (переопределяемый 3)” / 2
(my_app) lib / my_app / web / endpoint.ex: 1: MyApp.Web.Endpoint.call/2
(плагин) lib / plug / adapters / cowboy / handler.ex: 15: Plug.Adapters.Cowboy.Handler.upgrade / 4  

После небольшой отладки я нашел решение этой проблемы, но оно не было чистым.Поскольку я использую DateTimeWithTimezone, мне нужно было создать новый настраиваемый тип в указанной здесь базе данных.

  СОЗДАТЬ ТИП datetimetz AS (dt timestamptz, tz varchar);  

Эта структура представляет обычный тип часового пояса, доступный в PostgreSQL (timestamptz), и расположение часового пояса в строке формата. Чтобы запросить эту структуру, я решил использовать функцию фрагмента и проверить параметр dt. Например:

  MyApp.Table
|> где ([ur], фрагмент («(expire_date).Timezone.convert (Timex.now, «Европа / Лиссабон»), Timex.Ecto.DateTimeWithTimezone))
|> Repo.delete_all  

Наконец, счастливый конец этой проблемы и лучшее понимание того, как работают Ecto и Timex!

Спасибо за внимание!

Большое спасибо за чтение, это очень много значит для нас! Не забывайте следить за Coletiv в Facebook, Twitter и LinkedIn, поскольку мы продолжаем публиковать интересные статьи о технологиях, процессах и опыте.

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



Хотите стать частью нашего сообщества?

Подпишитесь на нашу рассылку новостей 😎

Fud duivntvr 6S7] Ecto dyfuslabx (zo «) du (x + x + L) arn dt 0,4 (~ xe * 1 +7 6jcd ‘C (

Стенограмма видео

Хорошо, поэтому в этом вопросе мы просто хотим найти образ без смысла. Первые сеты минус два минус 10 12 и три. А у нас Fo X равен полу, исключая мою жизнь. Хорошо, поэтому нам просто нужно выполнить вычисления обо всем.Так что у нас всегда минус два. Он будет мастером пола в поту. Это четыре, разделенные на три, что составляет 1,3 повторения. Это всего лишь один, если скромный собирается прищуриться. Таким образом, когда они выиграли с разницей в три, что составляет всего 0,3 повторения, это всего лишь ноль, если ноль равен нулю в квадрате ноль, деленный на три. Так что это серьезная сторона. Это просто за ноль. Это ноль. Если все один на один квадрат, то просто один делится на три. Это его полно. Есть ли 0.3. Повторение было просто нулевым старым чу для двух пробелов.Это 41 на три, то есть одна на три картины. У нас один из трех полностью состоит из трех кальмаров. Это дает вам девять. Какие? К трем. Это 43. Итак, мы ограничиваем наше изображение, все говорят, что это будет 013, чтобы быть осторожным, вы не ставите дважды. Гм, нельзя ставить одно и то же число дважды больше, чем дважды в набор. Потому что, строго говоря, санитарию нужно ездить как уникальные номера. Так что, хотя 7001 эквивалентен 011, вы так не пишете. Ты прав. Что касается органа, вы — числа.Ну вот так. Нет, мм, B s равно 012345 Поэтому s, где x хорошо сказано, разделите все. Итак, F или ноль будет просто нулевым квадратом, разделенным на три семестра. Ноль, потому что ноль, если единица — вам 21 переключатель, это единица деленная на три. Это ваш f, который вы хотите посетить, выберете, где это четыре, разделенные на три. Это один. Если оба три — это три пота, то есть девять. Разделите на три. Так что это его трое. Разделено на три. Таким образом, 95 на 3, 53, четыре дают 16-й этаж года.Итак, примерно четыре квадрата равно 16, разделенному на три. Так что это будет примерно 15. Мы 5,3 повторяем. Итак, это пять. И, наконец, от пяти простых до 25, разделенных на три, которые должны дать вам это. Итак, наши наборы в 013 живут восьмерками. Хорошо. См. S равно 15 7 11 Таким образом, f или F или X легче взорвать. Три. Единица будет равна единице в квадрате, деленной на три. Итак, просто ноль f 055 в квадрате дает 25, деленное на три. Так что это все равно не восемь. F 07 Итак, семь в квадрате дает вам 49, разделенное на три.По этим извинениям, 16 f o 11 дает вам 4 11 квадратов. Итак, это 121. А как насчет трех? Итак, у вас четыре. Итак, тогда ваше изображение будет 08 16 и 40 И, наконец, у нас есть s равно 26 10 и 14. 14 f o x равно ну, воскликнула дикая природа. Теперь F 02 полностью. Также писк есть или делится на три. Так что это всего одна F из шести. Это было от 6 20 до 36. Вы хотите около трех? Это всего 12. Каждые 10 часов. Что дает вам 100, разделенные на три секунды. У вас 33 из 14 — это 14 квадратов, в чем я не очень уверен.И начни выкладывать спред. Три, что составляет всего 65. Итак, вы устанавливаете усилие по изображению на «занято», 12 33 и cc. Также следует отметить, что я также хочу сказать, что вам не всегда нужно писать This sets в строго возрастающем порядке или в каком-то порядке. Вы можете очень легко исправить все это как 1 33 12 65 Это не имеет особого значения или не так уж важно. Что важнее, так это исключение уникальности, но это всего лишь быстрое следующее.

От файловой системы к ecto

В части 8 приключения по сокращению URL-адресов мы переходим от файловой системы и узнаем, как использовать Ecto и Postgres.

Часть 8: Ecto

Сегодня мы записываем каждый сокращенный URL-адрес в файловую систему, и это помогает нам восстанавливать состояние приложения между перезапусками. Хотя изначально это решало проблему, большинство реальных приложений на Эликсире хранят данные в базе данных, такой как Postgres или MySQL.

Мы начинаем с добавления нескольких зависимостей в файл mix.exs, которые явно извлекают ecto_sql, postgrex и phoenix_ecto.

  defmodule Example.MixProject do 
      используйте Mix.Проект 
     
      defp deps до 
      [
      ... 
      {: phoenix_ecto, "~> 4.0"}, 
      {: ecto_sql, "~> 3.0"}, 
      {: postgrex, "> = 0.0.0"} 
     ] 
      конец 
     
      конец 
   

Установите эти новые зависимости, используя mix в командной строке.

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

  defmodule Пример.Repo do 
      использовать Ecto.Repo, 
      otp_app:: например, 
     Адаптер : Ecto.Adapters.Postgres 
      конец 
   

Прежде чем мы сможем использовать это репо, нам нужно обновить файл application.ex. Добавьте запись для `Example.Repo` в список дочерних процессов.

  defmodule Пример. Приложение do 
      использовать приложение 
     
      def start (_type, _args) do 
      диспетчер импорта.Спецификация 
     
      детей = [
      супервизор (Example.Repo, []), 
      руководитель (ExampleWeb.Endpoint, []), 
      ... 
     ] 
     
      opts = [стратегия:: one_for_one, имя: Example.Supervisor] 
      Supervisor.start_link (children, opts) 
      конец 
      конец 
   

Теперь мы можем добавить схему, которая определяет структуру данных связи, которую мы планируем хранить в базе данных.Добавьте файл link.ex и включите 2 поля вместе с простой меткой времени, чтобы записать «Insert_at» вместе с датами «updated_at».

  defmodule Пример. Ссылка на 
      использовать Ecto.Schema 
     
     Схема  "ссылки" на 
      поле: хэш,: строка 
      поле: url,: строка 
     
      отметок времени () 
      конец 
      конец 
   

Затем нам нужно добавить некоторую конфигурацию для подключения нашего репозитория Ecto.Откройте файл config.exs и добавьте строку, указывающую `ecto_repos` на репо, которое мы создали ранее.

  используйте Mix.Config 
     
     Конфигурация : пример, 
      ecto_repos: [Example.Repo] 
      ... 
   

Теперь в файле dev.exs нам нужно настроить имя пользователя, пароль, базу данных и имя хоста для подключения к Postgres.

  # Настройте базу данных 
     Конфигурация : пример, Example.Repo, 
      имя пользователя: "postgres", 
      пароль: "postgres", 
      база данных: "example_dev", 
      имя хоста: "localhost", 
      размер бассейна: 10 
   

Теперь у нас есть достаточно кода, чтобы запустить несколько экто-команд со смесью, чтобы посмотреть, сможем ли мы создать базу данных, которую мы настроили.

Примечание
: этот шаг предполагает, что у вас установлен и запущен postgres
  смесь ecto.create 
      микс ecto.gen.migration create_links 
   

Затем откройте файл миграции create_links.exs и заполните функцию `change`, чтобы создать нашу таблицу с полями хеша и URL.

  defmodule Example.Repo.Migrations.CreateLinks do 
      используйте Ecto.Migration 
     
      def изменить до 
      создать таблицу (: ссылки) сделать 
      добавить: hash,: string, primary_key: true 
      добавить: url,: string 
     
      отметок времени () 
      конец 
     
      создать unique_index (: links, [: url]) 
      конец 
      конец 
   

Теперь запустите эту миграцию, используя сочетание из командной строки.

Позже мы запустим тесты, чтобы подтвердить, что эта миграция создала таблицы, но быстрая выборочная проверка с помощью инструмента командной строки `psql` поможет нам почувствовать себя теплыми и нечеткими.

  psql -h localhost -d example_dev -U postgres 
   

Если соединение установлено, запустите команду `\ dt`, чтобы увидеть, какие таблицы были созданы. Вы должны увидеть таблицу `links`, которую мы создали при миграции выше.

Теперь, когда у нас есть схема и связь с базой данных, нам нужно написать модуль, который позволит нам делать запросы с Ecto.Добавьте в проект новый файл с именем links.ex, который будет служить интерфейсом между Elixir и Postgres.

  defmodule Пример. Ссылки на 
      import Ecto.Query, warn: false 
     
      псевдоним Example.Repo 
      псевдоним Пример. Ссылка 
     
      def все сделать 
      Repo.all (Ссылка) 
      конец 
     
      def create_link (attrs \\% {}) do 
      Ссылка 
      |> struct (attrs) 
      |> Репо.вставить () 
      конец 
      конец 
   

Модуль в нашем приложении, который сохраняет сокращенные ссылки сегодня, — cache.ex. Мы изолировали файловую систему в достаточной степени, чтобы эта подкачка прошла безболезненно. Сначала обновите handle_call, чтобы использовать новую функцию Links.all. Мы извлекаем значения хэша и URL и бросаем их в карту. Затем обновите handle_cast, чтобы использовать функцию Links.create_link. Мы передаем аргументы хеша и URL-адреса, используя карту, которая позже будет преобразована в структуру до того, как Ecto выполнит вставку.

  defmodule Пример.Cache do 
      использовать GenServer 
     
      псевдоним Пример. Ссылки 
     
      ... 
     
      @impl GenServer 
      def handle_call ({: all}, _timeout, _state) do 
     Состояние  = для% Example.Link {hash: key, url: value}
      {: ответ, состояние, состояние} 
      конец 
     
      @impl GenServer 
      def handle_cast ({: put, key, value}, state) do 
      Ссылки.create_link (% {hash: key, url: value}) 
      {: noreply, Map.put (состояние, ключ, значение)} 
      конец 
      конец 
    

Чтобы протестировать эту функциональность, нам сначала нужно поменять местами помощники файловой системы, которые я написал ранее для помощника `DataCase`, который поставляется с Phoenix.

  defmodule CacheTest do 
      используйте ExampleWeb.DataCase, async: false 
     
      тест "все возвращает состояние и ставит обновления" do 
      {: ok, _} = GenServer.start_link (Пример.Cache,: ok) 
     
      assert Example.Cache.all (: cache) ===% {} 
     
      Example.Cache.put (: cache, "x", "google.com") 
     
      assert Example.Cache.all (: cache) ===% {"x" => "google.com"} 
      конец 
      конец 
   

Обновите сам помощник по тестированию, чтобы включить адаптер песочницы.

  ExUnit.start () 
      Ecto.Adapters.SQL.Sandbox.режим (Пример. репо,: manual) 
   

Обновите файл test.exs, чтобы настроить имя пользователя, пароль, базу данных и имя хоста для подключения к Postgres.

  # Настройте базу данных 
     Конфигурация : пример, Example.Repo, 
      имя пользователя: "postgres", 
      пароль: "postgres", 
      база данных: "example_test", 
      имя хоста: "localhost", 
     Пул : Ecto.Adapters.SQL.Sandbox 
   

Обновите микс.exs, чтобы включить псевдонимы, которые устанавливают и разрушают нашу базу данных между тестами.

  defmodule Example.MixProject do 
      используйте Mix.Project 
     
      def проект до 
      [
      приложение:: пример, 
      ... 
      псевдонимов: aliases (), 
      депс: депс () 
     ] 
      конец 
     
      defp псевдонимы do 
      [
      "экто.setup ": [" ecto.create "," ecto.migrate "," run priv / repo / seed.exs "], 
      «ecto.reset»: [«ecto.drop», «ecto.setup»], 
      тест: ["ecto.create --quiet", "ecto.migrate", "test"] 
     ] 
      конец 
      конец 
   

Теперь вы можете запустить тест кеша из командной строки с помощью mix, чтобы убедиться, что он работает непрерывно.

  смешанный тест test / cache_test.exs 
   

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

Frontiers | Экто-5′-нуклеотидаза (CD73) регулирует выживаемость CD8 + Т-клеток

Введение

Современные иммунотерапевтические методы лечения рака состоят из адоптивного переноса ex vivo опухолеспецифических CD8 + Т-клеток пациенту; однако эти методы лечения не всегда успешны (Restifo et al., 2012). Появилось несколько стратегий для повышения эффективности методов адоптивного переноса клеток, таких как предшествующее истощение лимфоцитов (лимфокондиционирование) для устранения иммуносупрессивных клеток, ингибирование иммунных контрольных точек или модуляция статуса дифференцировки перенесенных CD8 + Т-клеток (Gattinoni et al., 2006; Restifo et al., 2012). Сообщалось, что степень дифференцировки CD8 + Т-клеток, используемых во время противоопухолевой терапии, обратно пропорциональна их способности сохраняться в микроокружении опухоли и, следовательно, уничтожать опухоли (Gattinoni et al., 2006). В этой линии адоптивный перенос высокодифференцированных лимфоцитов, таких как эффекторные CD8 + Т-клетки, оказался невыгодным в долгосрочной перспективе (Gattinoni et al., 2005). Эти наблюдения вызывают озабоченность по поводу использования терминально дифференцированных CD8 + Т-клеток для адоптивной клеточной терапии и подчеркивают важность понимания механизмов, которые управляют дифференцировкой CD8 + Т-клеток в различные подмножества.

Активация наивных CD8 + Т-клеток способствует росту и генерации гетерогенных популяций, которые различаются пролиферативным потенциалом, поддержанием, выживаемостью и цитотоксической способностью (Gattinoni et al., 2012). Среди этих популяций эффекторные Т-лимфоциты обладают более высоким статусом дифференцировки, что приводит к более высоким уровням экспрессии альфа-цепи рецептора IL-2 (CD25) в дополнение к высокой пролиферативной и цитотоксической способности (Kalia et al., 2010; Чжан и Беван, 2011; Бойман, Спрент, 2012).С другой стороны, наивные клетки и клетки памяти продуцируют низкие уровни эффекторных белков, но обладают более высокой выживаемостью и способностью к самообновлению, чем эффекторные клетки, и поэтому рассматривались для использования в иммунотерапии против рака (Fearon et al., 2001; Gattinoni et al. др., 2011).

В отсутствие антигенной стимуляции гомеостатические цитокины, такие как IL-15 и IL-7, позволяют поддерживать память и наивные Т-клетки (Tan et al., 2001, 2002; Goldrath et al., 2002; Raeber et al., 2018). IL-7 продуцируется подмножеством фибробластных ретикулярных клеток во вторичных лимфоидных органах и удерживается в этих участках за счет связывания с внеклеточным матриксом (Link et al., 2007; Барата и др., 2019). Ответ Т-клеток на IL-7 регулируется посредством модуляции альфа-цепи рецептора IL-7 (IL-7Rα или CD127), которая димеризуется с общей гамма-цепью с образованием рецептора IL-7 (Kondo et al., 1994) . CD127 в основном экспрессируется наивными Т-клетками и Т-клетками памяти (Schluns et al., 2000), и его экспрессия регулируется передачей сигналов IL-7 и Т-клеточного рецептора (TCR) (Raeber et al., 2018). Ось передачи сигналов IL-7 / CD127 обеспечивает выживание и поддержание Т-клеток, способствуя экспрессии антиапоптотического белка Bcl-2, предотвращая апоптоз через митохондриальный путь (Akashi et al., 1997; Schluns et al., 2000; Войцеховски и др., 2007; Сур и Спрент, 2008; Jacobs et al., 2010). Хотя Т-клетки памяти также зависят от IL-7 для выживания, IL-15 является основным цитокином, управляющим их гомеостатической пролиферацией (Surh and Sprent, 2000; Raeber et al., 2018).

В отличие от наивных Т-клеток, антиген-активированные Т-клетки недолговечны, и факторы, которые способствуют их выживанию in vivo , полностью не выяснены. CD127 подавляется при антигенной стимуляции, а количество Т-клеток контролируется другими механизмами, которые включают передачу сигналов CD25 / IL-2 (Marrack et al., 2000) и активация пути PI3-kinase / Akt (Xue et al., 2002). Более того, пролонгированная передача сигналов IL-2 способствует терминальной эффекторной дифференцировке CD8 + Т-клеток (Pipkin et al., 2010).

Аденозин считается иммунодепрессивной молекулой, которая снижает активацию и пролиферацию эффекторных лимфоцитов посредством передачи сигналов рецептора A2A (A2AR) (Linnemann et al., 2009; Mastelic-Gavillet et al., 2019). Мы продемонстрировали, что ось аденозин / A2AR важна для поддержания и выживания наивных лимфоцитов в условиях гомеостатической пролиферации, поскольку она предотвращает подавление CD127 в CD8 + Т-клетках.Интересно, что передача сигналов аденозина не обнаруживает эффекта на поддержание лимфоцитов центральной памяти (Cekic et al., 2013), указывая на дополнительный регуляторный механизм выживания клеток памяти.

Основным ферментом, участвующим в производстве аденозина, является экто-5′-нуклеотидаза (CD73), и, как следствие, он в настоящее время считается новой контрольной точкой иммунитета (Allard et al., 2016; Chen et al., 2019). CD73 экспрессируется опухолевыми клетками, а также иммунными популяциями, такими как наивные CD8 + Т-клетки и клетки памяти (Bono et al., 2015). Однако роль этого фермента в дифференцировке, поддержании и выживании CD8 + Т-клеток не изучена. Здесь мы описываем, что CD73 оказывает двойное действие на CD8 + Т-клетки в зависимости от того, подвергаются ли Т-клетки гомеостатической или антигенной стимуляции. Используя мышиные модели гомеостатических и антигенных условий, мы продемонстрировали, что CD73 способствует экспрессии α-цепи рецептора интерлейкина-7 на CD8 + Т-клетках и их гомеостатическому выживанию. Напротив, CD73 снижает выживаемость активированных CD8 + Т-клеток при антигенной стимуляции, что можно объяснить подавлением экспрессии α-цепи рецептора интерлейкина-2 и антиапоптотической молекулы Bcl-2.Эти результаты показывают, что роль CD73 в отношении CD8 + Т-клеток следует учитывать при разработке эффективных противоопухолевых методов лечения.

Материалы и методы

Мыши

CD73KO (B6.129S1-Nt5e tm1Lft / J), C57BL / 6 (CD45.2 +), CD45.1 + (B6.SJL-Ptprc a Pepc b / BoyJ), Rag1 — / — (B6.129S7-Rag1 tm1Mom / J) и OT-I (C57BL / 6-Tg (TcraTcrb) 1100Mjb / J) были приобретены в лаборатории Джексона. Мышей OT-I / CD73KO получали путем обратного скрещивания F1 (OT-IxCD73KO) с мышами CD73KO и тестирования экспрессии трансгенного TCR Vα2Vβ5 и CD73 с помощью FACS.Мышей содержали в помещении для животных Fundacion Ciencia & Vida. Работа с животными выполнялась в соответствии с институциональными правилами Fundacion Ciencia и Vida и Facultad de Ciencias, Universidad de Chile, и была одобрена местными комитетами по этике. Обычно для всех экспериментов использовали мышей в возрасте 6-8 недель, за исключением тех, которые использовались для получения CD8 + Т-клеток центральной памяти.

Антитела

Антитела против CD8a PECy7 (клон 53-6.7), CD8a APCeFluor780 (клон 53-6.7), CD25 PE (клон PC61.5), CD62L FITC (клон MEL-14), Vα2 PE (клон B20.1) и Vβ5 FITC (клон MR9-4) были получены от eBioscience. Антитела против CD44 APC (клон IM7), CD45.1 PECy7 (клон A20), CD45.2 Alexa Fluor 647 (клон 104), CD127 APC (клон A7R34), Ki-67 Alexa fluor 488 (клон 11F6), Bcl-2 PE (клон BCL / 10C4), CD16 / 32 (FcBlock) и активирующие антитела α-CD3 (клон 145-2C11) и α-CD28 (клон 37,51) были получены от BioLegend.

Проточная цитометрия

Для окрашивания клеточной поверхности клеточные суспензии инкубировали в темноте в течение 30 минут при 4 ° C со смесью антител, конъюгированных с различными флуорохромами, в присутствии красителя жизнеспособности (Fixable Viability Dye eFluor 780, eBiosciencies) для удаления мертвых клеток.Затем клетки центрифугировали при 600 × g в течение 7 минут при 4 ° C и ресуспендировали в PBS + 2% FBS для анализа FACS.

Чтобы оценить частоту и абсолютное количество перенесенных CD8 + Т-клеток, кровь брали в разные моменты времени путем разрезания боковой хвостовой вены у мышей скальпелем. Кровь собирали в гепаринизированные пробирки (Sanderson Laboratory, 1000 МЕ / мл), а затем инкубировали с антителами против CD16 / CD32 (Fc Block) перед добавлением смеси антител, конъюгированных с флуорохромом.Кровь инкубировали при комнатной температуре в течение 20 мин, а затем лизировали 1 мл раствора для лизиса эритроцитов (лизирующий раствор BD FACS, BD Biosciences). Образец промывали и осадок ресуспендировали в PBS + 2% FBS для анализа FACS. Абсолютное количество CD8 + Т-клеток в крови анализировали с использованием счетных шариков для абсолютного подсчета CountBright (Life Technologies), следуя инструкциям производителя.

Для анализа внутриклеточной экспрессии Bcl-2 и Ki-67 после окрашивания поверхности клетки клетки фиксировали и пермеабилизировали буфером для фиксации / пермеабилизации Foxp3 (eBiocience) и инкубировали в течение 20 мин при 4 ° C.Затем клетки промывали буфером для пермеабилизации (BD Biosciences) и инкубировали с антителами против Bcl-2 или Ki-67 в течение 30 минут при 4 ° C. Наконец, клетки промывали буфером для пермеабилизации и ресуспендировали в PBS + 2% FBS для анализа FACS. Данные FACS анализировали с помощью программы FlowJo V10 (Tree Star, Inc.).

Окрашивание аннексином V / PI

Клетки

собирали, центрифугировали при 600 × g в течение 7 мин и ресуспендировали в 100 мкл буфера для связывания (10 мМ HEPES, 140 мМ NaCl, 2.5 мМ CaCl2 и pH 7,4), содержащий 0,5 мкл Аннексина V APC (Biolegend) и 2 мкл йодида пропидия (50 мкг / мл) (Sigma). Клетки инкубировали в течение 20 минут при комнатной температуре и, наконец, добавляли 300 мкл связывающего буфера. Клетки немедленно анализировали с помощью FACS.

Фиолетовое окрашивание клеточных следов (CTV)

Для мечения CTV клетки промывают и ресуспендируют в фосфатно-солевом буфере (PBS) при 10 7 клеток / мл в присутствии CTV (10 мкМ). Их инкубировали 20 мин при 37 ° C в темноте.Реакцию останавливали добавлением 5 мл IMDM + 10% FBS и инкубированием в течение 5 мин. Затем клетки промывали и подсчитывали в камере Нойбауэра, исключая мертвые клетки, с использованием красителя трипанового синего.

Выделение наивных CD8 + Т-клеток и клеток центральной памяти

Наивные CD8 + Т-клетки центральной памяти были получены из селезенки и периферических лимфатических узлов (PLN) дикого типа (CD45.1 +), CD73KO (CD45.2 +), OT-I (CD45.1 + / CD45.2 +) , или мышей OT-I / CD73KO (CD45.2 +). Вкратце, селезенки перфузировали RPMI 1640 с добавлением 10% FBS.Лимфатические узлы были механически дезагрегированы ножницами. Суспензию клеток фильтровали через металлическую сетку, и CD8 + Т-клетки обогащали путем отрицательной селекции с использованием магнитных шариков MACS (Miltenyi Biotec), следуя инструкциям производителя. После обогащения CD8 + Т-клеток путем сортировки клеток с использованием сортировщика клеток FACS Aria III (Biosciences ).

In vivo Гомеостатическая пролиферация

Наивные клетки мышей WT и CD73KO подсчитывали под микроскопом с окрашиванием трипановым синим и смешивали в соотношении 1: 1.Исходное соотношение или ввод анализировали с помощью FACS с использованием антител против CD45.1 и CD45.2. Всего 10 6 общих клеток из этой смеси были внутривенно (i.v.) перенесены в мышей Rag1 — / -. На 7, 14, 21 и 28 дни после усыновления были взяты образцы крови и проанализированы с помощью FACS. На 28 день мышей умерщвляли, и перенесенные клетки анализировали в селезенке, PLN и MLN с помощью FACS. Для получения отношения CD73KO / WT была использована следующая формула:

Соотношение CD73KO / WT = (CD73KOorgan / WTorgan) / (CD73KOinput / WTinput).

In vivo Антигенная пролиферация

Наивные CD8 + Т-лимфоциты, полученные от мышей OT-I (CD45.1 + / CD45.2 +) и OT-I / CD73KO (CD45.2 +), подсчитывали в камере Нойбауэра под микроскопом с окрашиванием трипановым синим и смешивали при соотношение 1: 1. Затем исходное соотношение (ввод) анализировали с помощью FACS с использованием антител против CD45.1 и CD45.2. Всего 1 × 10 6 клеток из этой смеси были адоптивно перенесены (в / в) мышам CD45.1 +. Через день после адоптивного переноса мышей вводили внутрибрюшинно (т.е.p.) иммунизировали 500 мкг белка OVA (Sigma-Aldrich) и 50 мкг Poly I: C (InvivoGen). На 7, 14, 21 и 28 дни после адоптивного переноса образцы крови были взяты и проанализированы с помощью FACS. На 28 день мышей умерщвляли, и перенесенные клетки анализировали с помощью FACS в селезенке, PLN и мезентериальном лимфатическом узле (MLN). Для получения отношения CD73KO / WT была использована следующая формула:

Соотношение CD73KO / WT = (CD73KOorgan / WTorgan) / (CD73KOinput / WTinput).

Для анализов пролиферации in vivo наивные CD8 + Т-клетки от мышей WT и CD73KO метили CTV (10 мкМ) и подсчитывали в камере Нойбауэра под микроскопом, исключая мертвые клетки, путем окрашивания трипановым синим.Затем клетки смешивали в соотношении 1: 1. Затем исходное соотношение (ввод) оценивали с помощью FACS с использованием антител против CD45.1 и CD45.2. Всего 1 × 10 6 клеток из этой смеси были адоптивно перенесены (в / в) мышам CD45.1 +. Через день после адаптивного переноса мыши были i.p. иммунизировали 500 мкг белка OVA (Sigma-Aldrich) и 25 мкг липополисахарида (LPS, Sigma). На 4 день мышей умерщвляли, и перенесенные клетки анализировали с помощью FACS в крови, селезенке, PLN и MLN.

In vitro Культура

Наивные CD8 + Т-клетки были получены из селезенки и PLN от мышей WT или CD73KO, как описано ранее. Клетки метили CTV, культивировали в 96-луночном круглодонном микропланшете (10 5 CD8 + Т-клеток / лунку) и активировали растворимым α-CD3 (1 мкг / мл; клон 145-2C11, eBioscience. ) и α-CD28 (1 мкг / мл; клон 37,51) в течение 4 дней в присутствии 10 нг / мл рекомбинантного мышиного IL-2 (eBioscience). В некоторых экспериментах к культурам добавляли ингибитор CD73 APCP [аденозин-5 ‘- (a, b-метилен) дифосфат] в концентрации 50 мкМ (Sigma-Aldrich).По показаниям, стабильный непроницаемый для клеток аналог аденозина NECA (Tocris) добавляли к культурам в концентрации 1 мкМ в присутствии 1 ед. / Мл аденозиндезаминазы (Roche) для предотвращения эффекта эндогенно генерируемого аденозина. Селективный антагонист A2AR SCH58261 (Sigma-Aldrich) добавляли до конечной концентрации 5 мкМ.

Статистический анализ

Данные выражены как среднее ± стандартное отклонение (SD). Сравнение средней интенсивности флуоресценции и частоты клеток между двумя группами проводили с помощью непараметрического критерия Манна-Уитни или параметрического t-критерия, если образцы следовали нормальному распределению.Для сравнения трех или более групп данных использовали критерий Краскела-Уоллиса или односторонний дисперсионный анализ, если образцы следовали нормальному распределению. Для статистического анализа абсолютного количества Т-клеток в экспериментах по гомеостатической пролиферации использовали двухфакторный тест ANOVA и пост-тест Бонферрони. Для статистического анализа использовалась программа GraphPad Prism 5 (GraphPad Software, Сан-Диего, Калифорния, США). Статистическую значимость рассматривали при значении p <0,05. ( * п. <0.05, ** p <0,01, *** p <0,005, **** p <0,001).

Результаты

CD73 способствует гомеостатической пролиферации и экспрессии CD127 на наивных CD8 + Т-клетках

Ранее мы продемонстрировали, что аденозин способствует выживанию наивных Т-клеток (Cekic et al., 2013). Поскольку CD73 является основным ферментом, участвующим в производстве аденозина, мы сначала попытались проанализировать роль этой эктонуклеотидазы в гомеостатическом выживании наивных CD8 + Т-клеток.Для этого мы совместно перенесли отсортированные наивные WT (CD45.1 +) и CD73KO (CD45.2 +) CD8 + Т-клетки (CD8 + / CD25- / CD44- / CD62Lhi) в мышей-реципиентов Rag1 — / — и проанализировали частота и абсолютное количество этих клеток в крови в разные моменты времени. Как показано на фиг. 1A, B, частота CD73KO CD8 + T-клеток в крови на 14 день была снижена по сравнению с WT CD8 + T-клетками, и эта разница сохранялась до 28 дня после переноса. Соответственно, соотношение клеток CD73KO / WT на 14 и 21 день после переноса было снижено по сравнению с вводом (рис. 1C).В этом гомеостатическом состоянии абсолютное количество CD8 + Т-клеток дикого типа увеличилось примерно в шесть раз по абсолютному значению на 14-й день, в то время как CD73KO CD8 + Т-клетки увеличились примерно в три раза по абсолютному количеству (рис. 1D). Это различие не связано с преимущественной миграцией или удержанием CD73KO CD8 + Т-клеток в других органах, поскольку мы наблюдали снижение соотношения CD73KO / WT клеток в селезенке и периферических лимфатических узлах (PLN) (рис. 1E).

Рисунок 1 .CD73 способствует гомеостатической пролиферации in vivo, и экспрессии CD127 в наивных CD8 + Т-клетках. Наивные CD8 + Т-клетки (CD8 + / CD25- / CD44- / CD62L +), полученные от мышей WT (CD45.1 +) и CD73KO (CD45.2 +), совместно переносили мышам Rag1 — / -. У мышей Rag1 — / — брали кровь в разные дни для анализа частоты и фенотипа перенесенных клеток. На 28 день мышей умерщвляли для анализа перенесенных клеток селезенки и периферических лимфатических узлов (PLN). (A) Графики FACS , показывающие вход и частоту перенесенных клеток на 7, 14 и 28 дни в крови .(B) Частота перенесенных клеток в кровь на входе и на 7, 14, 21 и 28 дни. (C) Соотношение CD73KO / WT на входе и на 7, 14, 21 и 28 дни в крови. (D) Абсолютное количество перенесенных CD8 + Т-клеток в крови на 7, 14, 21 и 28 дни. (E) Отношение CD73KO / WT на входе и на 28 день в селезенке, PLN и крови. (F) Частота Ki67 + клеток (привязанных к перенесенным клеткам) на входе, селезенке и PLN на 28 день. (G) Слева, наложение гистограммы FACS, отображающее экспрессию CD127 (привязанную к перенесенным клеткам) в селезенке на 28 день .Справа: частота CD127 + среди перенесенных клеток в селезенке, PLN и крови на 10 и 28 день. (H) Частота перенесенных клеток, экспрессирующих наивные (CD44- / CD62L +), эффекторную память (CD44 + / CD62L–) и фенотипы центральной памяти (CD44 + / CD62L +) на 7, 14, 21 и 28 дни в крови. Все данные представляют собой среднее значение ± стандартное отклонение. Данные анализировали с помощью двустороннего непарного теста Стьюдента t -тест (B, D, F – H) или одностороннего дисперсионного анализа с апостериорным тестом Бонферрони (C, E) . * p <0.05; ** p <0,01; *** p <0,005; **** п <0,001.

Затем мы проанализировали, было ли это уменьшение количества клеток CD73KO из-за снижения пролиферативной способности. Для этого мы проанализировали экспрессию Ki67 в перенесенных CD8 + Т-клетках на 28 день в селезенке и PLN. В соответствии с нашими предыдущими результатами, мы наблюдали статистически значимое снижение экспрессии Ki67 в CD73KO CD8 + Т-клетках в PLN (рис. 1F). Все эти данные предполагают, что CD73 способствует гомеостатической пролиферации наивных CD8 + Т-клеток у лимфопенических мышей.

Поскольку наивные Т-клетки зависят от передачи сигналов IL-7 / IL-7R для выживания и гомеостатической пролиферации, мы исследовали экспрессию CD127 (альфа-цепь IL-7R) в перенесенных CD73KO CD8 + T-клетках на 10-й и 28-й день после адоптивного переноса в Rag1– / — мыши-получатели. Как показано на рисунке 1G, мы наблюдали значительное снижение экспрессии CD127 в CD73KO CD8 + Т-клетках в селезенке и крови по сравнению с клетками дикого типа на 10 день. На 28 день мы наблюдали значительные различия в экспрессии CD127 между CD73KO и клетками дикого типа только в селезенка.Чтобы изучить, предотвращает ли аденозин подавление CD127, мы культивировали наивные CD8 + Т-клетки с NECA, аналогом аденозина. Наши результаты показывают, что NECA предотвращает подавление активности CD127 в клетках дикого типа после антигенной стимуляции (дополнительный рисунок 1). Эти данные предполагают, что CD73 и аденозин предотвращают подавление активности CD127 на наивных CD8 + Т-клетках и, как следствие, регулируют их гомеостатическую пролиферацию.

CD73 не влияет на дифференцировку CD8 + Т-клеток центральной памяти и выживание в гомеостатических условиях

Было показано, что при переносе мышам Rag1 — / — наивные CD8 + Т-клетки пролиферируют и дифференцируются непосредственно в клетки памяти (Cho et al., 2000). Затем мы проанализировали, регулируется ли дифференцировка памяти in vivo у лимфопенических мышей с помощью CD73. Для этого после переноса наивных CD8 + Т-клеток мышам Rag1 — / — мы проанализировали экспрессию CD44 и CD62L в CD73KO и CD8 + T-клетках дикого типа в крови в разные моменты времени. Как показано на рисунке 1H, через 7 дней после переноса CD8 + Т-клетки приобретают фенотип центральной памяти (CD44 + / CD62L +) и эффекторной памяти (CD44 + / CD62L–). К 14 дню большинство клеток демонстрируют фенотип эффекторной памяти, и этот фенотип сохраняется в более поздние моменты времени.Интересно, что частота клеток, экспрессирующих центральный фенотип памяти, была увеличена в клетках CD73KO по сравнению с CD8 + Т-клетками дикого типа на 7, 14 и 21 день.

Для дальнейшего исследования роли CD73 в выживаемости центральных клеток памяти мы совместно перенесли отсортированные CD73KO и CD8 + Т-клетки центральной памяти WT в мышей-реципиентов Rag1 — / — и проанализировали их частоту в различные моменты времени. Как показано на фиг. 2A, B, частота клеток CD73KO в крови была выше, чем клеток дикого типа в ранние моменты времени (день 7 и день 14), но эта разница исчезает в более поздние моменты времени (день 28).Мы не наблюдали значительных различий в соотношении CD73KO / WT в крови во все моменты времени (рис. 2C). Эти данные предполагают, что в отличие от наивных клеток, CD73 только снижает частоту центральной памяти CD8 + Т-клеток в ранние моменты времени в крови, но не влияет на соотношение перенесенных клеток. На 28 день мы не наблюдали никаких различий в экспрессии Ki67 (фигура 2D), предполагая, что любые различия в пролиферации Т-клеток могут происходить на ранней стадии после переноса Т-клеток. Более высокая частота CD73KO CD8 + Т-клеток, наблюдаемая на 7 и 14 дни, не связана с преимущественной миграцией клеток памяти в лимфатических узлах, поскольку соотношение CD73KO / WT сохранялось среди различных органов (рис. 2E).

Рисунок 2 . CD73 не влияет на дифференцировку CD8 + Т-клеток центральной памяти и их выживание в гомеостатических условиях. CD8 + Т-клетки центральной памяти (CD8 + / CD25– / CD44 + / CD62L +), полученные от мышей WT (CD45.1 +) и CD73KO (CD45.2 +), совместно переносили мышам Rag1 — / -. У мышей Rag1 — / — брали кровь в разные моменты времени для анализа частоты и фенотипа перенесенных клеток. Мышей умерщвляли на 28 день для анализа перенесенных клеток в селезенке, PLN и брыжеечном лимфатическом узле (MLN). (A) Графики FACS, показывающие вход и частоту перенесенных клеток на 7, 14 и 28 дни в крови. (B) Частота перенесенных клеток на входе и в крови на 7, 14, 21 и 28 дни. (C) Соотношение CD73KO / WT на входе и 7, 14, 21 и 28 дни в крови . (D) Частота Ki67 + клеток на входе, селезенке и PLN на 28 день. (E) Отношение CD73KO / WT на входе и день 28 в селезенке, PLN, MLN и крови. (F) Слева: наложение гистограммы FACS, отображающее экспрессию CD127 в перенесенных клетках селезенки на 28 день.Справа: частота перенесенных CD127 + клеток на входе и в селезенке, PLN и крови на 28 день. (G) Частота перенесенных клеток, экспрессирующих наивные (CD44– / CD62L +), эффекторную память (CD44 + / CD62L–) и фенотипы центральной памяти (CD44 + / CD62L +) на 7, 14, 21 и 28 дни в крови. Все данные представляют собой среднее значение ± стандартное отклонение. Данные были проанализированы с помощью двустороннего непарного теста Стьюдента t -тест (B) , теста Манна-Уитни (D, F, G) или одностороннего дисперсионного анализа с апостериорным тестом Бонферрони (C , E) .* p <0,05; ** p <0,01.

Интересно, что когда мы проанализировали экспрессию CD127, мы наблюдали снижение частоты CD127 + Т-клеток в клетках CD73KO по сравнению с WT-клетками в селезенке (рис. 2F), аналогично тому, что мы наблюдали для наивных CD8 + Т-клеток. Мы не обнаружили никаких различий в частотах клеток, представляющих фенотип эффекторной памяти или центральной памяти (рис. 2G). Таким образом, эти данные выдвигают идею о том, что CD73 предотвращает подавление активности CD127 в центральной памяти и наивных CD8 + Т-клетках.

CD73 снижает содержание CD8 + Т-клеток после антигенной стимуляции

Наши данные на данный момент предполагают, что CD73 способствует гомеостатической пролиферации наивных CD8 + Т-клеток, вероятно, посредством механизма, опосредованного CD127. Мы спросили, было ли это так же после антигенной стимуляции CD8 + Т-клеток. Для этого мы совместно переносили наивные антиген-специфические (OT-I) CD73KO и наивные CD8 + Т-клетки дикого типа мышам CD45.1 +, а затем мышам вводили их родственный антиген (белок OVA) плюс Poly I: C для стимуляции in vivo активация перенесенных клеток.Как показано на фиг. 3A, B, частота CD73KO CD8 + T-клеток была увеличена по сравнению с WT-клетками в крови через 7, 14 и 28 дней. В соответствии с этим соотношение CD73KO / WT клеток в крови увеличилось по сравнению с вводом на 7 и 28 день после переноса (рис. 3C). Это увеличенное соотношение также наблюдалось в селезенке и других лимфатических узлах, снова подтверждая, что это различие не связано с измененной миграцией клеток CD73KO (рис. 3D). Мы не наблюдали различий в фенотипе (экспрессия CD44 / CD62L) перенесенных клеток в разные дни после антигенной стимуляции (рис. 3E).

Рисунок 3 . CD73 снижает частоту CD8 + Т-клеток после in vivo антигенной стимуляции. Наивные CD8 + Т-клетки (CD8 + / CD25– / CD44- / CD62L +), полученные от мышей OT-I (CD45.1 + / CD45.2 +) и OT-I / CD73KO (CD45.2 +), совместно переносили в CD45. .1+ мышей. Через 24 часа мышей-реципиентов иммунизировали внутрибрюшинно. с белком OVA (500 мкг) плюс Poly I: C (50 мкг). У мышей брали кровь в разные моменты времени для анализа частоты и фенотипа перенесенных клеток.На 28 день мышей умерщвляли для анализа перенесенных клеток селезенки, PLN и MLN. (A) Графики FACS , показывающие вход и частоту перенесенных клеток в крови на 7, 14 и 21 день. (B) Частота перенесенных клеток в крови на входе и на 7, 14, 21 и 28 дни. (C) Соотношение CD73KO / WT на входе и на 7, 14, 21 и 28 дни в крови. (D) Соотношение CD73KO / WT на входе и на 28 день в селезенке, PLN, MLN и крови. (E) Частота перенесенных клеток, экспрессирующих наивные (CD44- / CD62L +), эффекторную память (CD44 + / CD62L-) и центральную память (CD44 + / CD62L +) фенотипы в крови на 7, 14 и 21 день. (F) Наложение гистограммы для разведения CTV и гистограмма, отображающая частоту перенесенных клеток в каждом раунде пролиферации в селезенке, PLN, MLN и крови. Наивные CD8 + Т-клетки (CD8 + / CD24– / CD44– / CD62L +), полученные от мышей OT-I (CD45.1 + / CD45.2 +) и OT-I / CD73KO (CD45.2 +), были помечены клеточным следом фиолетового цвета. (CTV) и переносится совместно мышам CD45.1 +. Через 24 часа мышей-реципиентов иммунизировали внутрибрюшинно. с белком OVA (500 мкг) плюс LPS (25 мкг). Мышей умерщвляли на 4-й день для анализа пролиферации перенесенных клеток, оцененной с помощью разведения CTV в селезенке, PLN, MLN и крови.Все данные представляют собой среднее значение ± стандартное отклонение. Данные были проанализированы с помощью двустороннего непарного теста Стьюдента t -тест (B) , теста Манна-Уитни (E, F) или одностороннего дисперсионного анализа с апостериорным тестом Бонферрони (C, D) ) . * p <0,05; ** p <0,01; **** п <0,001.

Чтобы выяснить, связано ли это различие с повышенной скоростью пролиферации на клетках CD73KO, мы совместно перенесли меченные клеточными следами фиолетовые (CTV) антиген-специфические клетки CD73KO и WT и проанализировали разведение CTV через 4 дня после инъекции OVA плюс LPS в кровь и лимфатический узел.Как показано на рисунке 3F, мы не обнаружили различий в пролиферации CD8 + Т-клеток между CD73KO и клетками WT. Эти данные свидетельствуют о том, что CD73 снижает частоту появления CD8 + Т-клеток после in vivo антигенной стимуляции и что это, вероятно, не связано с различиями в пролиферативной способности клеток WT и CD73KO.

Для дальнейшего изучения механизмов, которые объясняют это увеличение частоты клеток CD73KO после антигенной стимуляции in vivo , мы провели анализов активации in vitro .Для этого наивные CD8 + Т-клетки от мышей WT и CD73KO были отсортированы, помечены CTV и стимулированы растворимыми анти-CD3 / CD28-антителами в присутствии IL-2 в течение 3-4 дней. Чтобы заблокировать ферментативную активность CD73, мы обрабатывали клетки WT ингибитором CD73 APCP [аденозин-5 ‘- (a, b-метилен) дифосфат] (50 мкМ). Как показано на Фигуре 4A, после антигенной стимуляции высокий процент клеток увеличивал экспрессию CD44, но мы не обнаружили различий в частотах CD44 + / CD62L + или CD44 + / CD62L- клеток между CD73KO, WT или APCP-обработанными клетками WT (Фигуры 4А, Б).Однако после активации in vitro мы получили более высокий процент восстановления клеток в культурах CD73KO, чем в клетках WT (рис. 4C). Это различие не было связано с более высоким пролиферативным ответом клеток CD73KO, поскольку мы наблюдали небольшую задержку пролиферативного ответа CD73KO CD8 + Т-клеток (рис. 4D). Хотя мы не обнаружили различий в частоте апоптотических или мертвых клеток в этих культурах (рисунки 4E, F), мы обнаружили 1,9-кратное увеличение экспрессии Bcl-2 в CD73KO и 1.5-кратное увеличение для клеток, обработанных APCP, по сравнению с клетками дикого типа (рис. 4G). Интересно, что мы также наблюдали значительное увеличение экспрессии CD25 (альфа-цепь IL-2R) на клетках WT, обработанных CD73KO и APCP, по сравнению с клетками WT (фигура 4H). Соответственно, экспрессия CD25 и Bcl2 в Т-клетках CD8 + дикого типа усиливалась в присутствии селективного антагониста A2AR SCH58261 после антигенной стимуляции (рисунки 4I, J), тогда как экспрессия CD25 подавлялась NECA (фигура 4K), демонстрируя, что передача сигналов аденозина является отрицательной. регулируют экспрессию Bcl2 и CD25 в CD8 + Т-клетках.Эти данные подтверждают идею о том, что CD73 и аденозин снижают выживаемость CD8 + Т-клеток после антигенной стимуляции за счет ограничения экспрессии Bcl-2 и CD25.

Рисунок 4 . CD73 снижает экспрессию CD25 в CD8 + Т-клетках после антигенной стимуляции in vitro . Отсортированные наивные CD8 + Т-клетки мышей WT и CD73KO метили CTV и активировали in vitro антителами против CD3 / CD28 в присутствии IL-2 (10 нг / мл). Где указано, к культурам добавляли APCP (50 мкМ), SCH58261 (5 мкМ) или NECA (1 мкМ).В разные моменты времени клетки собирали и анализировали с помощью FACS. (A) График FACS , отображающий экспрессию CD62L и CD44 в клетках WT, клетках WT, обработанных APCP, и клетках CD73KO на 4 день после активации. (B) Частота клеток, экспрессирующих CD62L и CD44, для клеток WT, клеток WT, обработанных APCP, и клеток CD73KO на 4 день после активации. (C) Процент восстановления клеток после 4 дней активации для клеток WT, клеток WT, обработанных APCP, и клеток CD73KO. Процент восстановления клеток: (абсолютное количество клеток, полученных после культивирования / абсолютное количество клеток, культивированных в начале анализа) × 100. (D) Наложение гистограммы, изображающее пролиферацию (в виде фиолетового разведения клеточных следов) для клеток WT и CD73KO в разные моменты времени после активации (репрезентативно для трех независимых экспериментов). (E) График FACS, показывающий окрашивание PI / аннексином V после 4 дней активации для клеток WT, клеток WT, обработанных APCP, и клеток CD73KO. (F) Частота мертвых и апоптотических клеток восстанавливалась после 4 дней активации для клеток WT, клеток WT, обработанных APCP, и клеток CD73KO. (G) Слева: наложение гистограммы, показывающее экспрессию Bcl-2 в разные моменты времени для клеток WT и CD73KO. Справа: кратное изменение экспрессии Bcl-2 (относительно клеток WT) в клетках CD73KO и клетках WT, обработанных APCP, после 3 дней активации. (H) Слева: наложение гистограммы, отображающее экспрессию CD25 в разные моменты времени для клеток WT и CD73KO. Справа гистограмма, показывающая среднюю интенсивность флуоресценции (MFI) CD25 после 3 дней активации для клеток WT, CD73KO и APCP. (I) Процент клеток CD25 + для клеток WT в различные моменты времени после активации в присутствии SCH58261 или его контрольного носителя (ДМСО). (J) Bcl2 MFI для клеток WT в различные моменты времени после активации в присутствии SCH58261 или его контрольного носителя (DMSO). (K) CD25 MFI для клеток WT на 4 день после активации в присутствии NECA или его контрольного носителя (DMSO). Все данные представляют собой среднее стандартное отклонение. Данные были проанализированы с помощью теста Краскала-Уоллиса с апостериорным тестом Данна (B, C, F – H) и двусторонним непарным тестом Стьюдента t -Test (K) * p < 0.05; ** p <0,01, *** p <0,005.

Обсуждение

CD73 — основной фермент, участвующий в выработке внеклеточного аденозина. Этот нуклеозид оказывает значительное подавляющее действие на иммунную систему, включая ингибирование пролиферации и функции антиген-специфических цитотоксических Т-клеток (Ohta et al., 2006; Vigano et al., 2019; Feng et al., 2020). Следовательно, и аденозин, и эктонуклеотидазы, ответственные за его продукцию, в настоящее время считаются мишенями для противоопухолевой терапии.В этой линии были предложены новые методы лечения с использованием блокирующих антител и малых молекул против CD73 (Antonioli et al., 2017), что подчеркивает актуальность изучения функции CD73 на CD8 + Т-клетках. Здесь мы проанализировали роль CD73 на выживаемость и рост CD8 + Т-клеток в антигенных и гомеостатических условиях. Мы показываем, что CD73 оказывает двойное действие на наивные CD8 + Т-клетки. С одной стороны, благоприятствует экспрессии α-цепи рецептора интерлейкина-7 и гомеостатическому выживанию CD8 + Т-клеток; при снижении α-цепи рецептора интерлейкина-2, экспрессии Bcl-2 и выживаемости CD8 + Т-клеток при антигенной стимуляции.В отличие от наивных CD8 + Т-клеток, CD73 не влиял на накопление CD8 + Т-клеток центральной памяти в гомеостатических условиях. Все эти данные предполагают, что блокада CD73 в контексте клеточной терапии против рака может не только снизить продукцию аденозина опухолевыми клетками, но также повлиять на выживаемость наивных CD8 + Т-клеток.

При оценке роли CD73 в гомеостатической пролиферации наивных CD8 + Т-клеток у лимфопенических Rag1 — / — животных мы наблюдали, что частота клеток CD73KO со временем снижалась по сравнению с клетками дикого типа, что позволяет предположить, что CD73 может способствовать выживанию наивных CD8 +. Т-клетки в этом контексте.Это наблюдение согласуется с нашими предыдущими доказательствами, демонстрирующими перекрестную связь между передачей сигналов аденозина и IL-7, где было показано, что аденозин индуцирует экспрессию CD127 посредством передачи сигналов рецептора A2A (Cekic et al., 2013). Более того, наши недавние открытия показывают, что передача сигналов IL-7, как было показано, поддерживает поддержание CD8 + Т-клеток, несмотря на присутствие внеклеточного аденозина (Koyas et al., 2021). Таким образом, можно предположить, что пониженная частота клеток CD73KO в гомеостатических условиях может быть объяснена дефектной передачей сигналов A2AR, которая транслируется в пониженную экспрессию CD127 и слабую передачу сигналов IL-7 для поддержания этих клеток.

Хотя мы сообщаем о накоплении клеток WT в наших анализах гомеостатической пролиферации, мы не наблюдали различий в окрашивании Ki67 на 28 день между CD73KO и клетками WT. Это может быть связано с тем, что в анализируемый момент времени клетки кажутся находящимися в фазе сокращения. Однако мы не смогли обнаружить существенную экспрессию Ki67 в ранние моменты времени (день 10 после адаптивного переноса). Необходимы дальнейшие эксперименты для определения точного времени пролиферации Т-клеток в этих гомеостатических условиях.

В отличие от наивных клеток, мы наблюдали, что частота центральных клеток памяти увеличивалась в отсутствие CD73 только в ранние моменты времени, но соотношение CD73KO / WT не влияло. В случае центральных клеток памяти мы также наблюдали снижение экспрессии CD127 в клетках CD73KO по сравнению с клетками WT. Хотя IL-7 и IL-15 были описаны как решающие для гомеостаза Т-клеток, IL-15 считается критическим цитокином, поддерживающим гомеостатическую пролиферацию клеток памяти (Lodolce et al., 1998; Беккер и др., 2002; Raeber et al., 2018). Таким образом, в случае CD8 + Т-клеток центральной памяти, CD127 может быть незаменим для их гомеостатической пролиферации, и другие сигнальные пути, запускаемые IL-15, могут стать актуальными (Hand et al., 2010; Kim and Suresh, 2013).

В отличие от наших наблюдений в гомеостатических условиях, эксперименты по адаптивному переносу наивных CD8 + Т-клеток от мышей OT-I и OT-I / CD73KO на животных WT продемонстрировали, что в присутствии сильной антигенной стимуляции экспрессия CD73 вредна для лимфоцитов. поскольку это снижает их выживаемость.При анализе того, является ли этот эффект следствием изменений скорости пролиферации, мы продемонстрировали, что OT-I и OT-I / CD73KO Т-клетки не обнаруживают различий в количестве циклов пролиферации на ранних стадиях in vivo . Эти результаты убедительно свидетельствуют о том, что CD73 может снижать выживаемость перенесенных CD8 + Т-клеток после антигенной стимуляции. Это согласуется с нашими данными из экспериментов in vitro , в которых мы наблюдали увеличение экспрессии антиапоптотического белка Bcl-2 и альфа-цепи IL-2R (CD25) в клетках CD73KO.Сообщалось, что Bcl-2 критически важен для выживания эффекторных клеток (Kurtulus et al., 2011) и что его экспрессия активируется с помощью IL-2 посредством пути передачи сигналов PI3K / Akt (Kelly et al., 2002). Следовательно, одно из объяснений повышенной выживаемости CD73KO CD8 + Т-клеток, о котором мы сообщаем, может быть связано с более сильной передачей сигналов IL-2, что приводит к более высокой экспрессии Bcl-2 и снижению апоптоза.

Как указано ранее, после антигенной стимуляции наивных CD8 + Т-клеток мы наблюдали более сильную активацию CD25 в CD73KO Т-клетках и WT-клетках, обработанных APCP, по сравнению с WT-клетками.Хорошо известно, что передача сигналов CD25 и IL-2 способствует терминальной эффекторной дифференцировке CD8 + Т-клеток (Kalia et al., 2010). Следовательно, под сильным антигенным стимулом CD73 и аденозин могут ингибировать дифференцировку CD8 + Т-лимфоцитов по эффекторному фенотипу. В этой линии наши результаты предполагают, что клетки с дефицитом CD73 обладают более высоким цитотоксическим потенциалом, о чем свидетельствует увеличение продукции IFN-γ, TNF-α и гранзима B. Более того, CD73-дефицитные клетки демонстрируют повышенное поглощение глюкозы и более высокое митохондриальное дыхание, что указывает на то, что эта эктонуклеотидаза ограничивает митохондриальную емкость в CD8 + Т-клетках.Наконец, при адоптивном переносе мышам с опухолью клетки с дефицитом CD73 были более эффективны против опухоли и экспрессировали более низкие уровни маркеров истощения (Briceño et al., 2021). Все эти данные свидетельствуют о том, что CD73 может действовать как ингибитор контрольной точки при антигенной стимуляции, ограничивая дифференцировку эффекторов и задерживая метаболическое репрограммирование цитотоксических Т-клеток.

Представленные здесь результаты позволяют нам предложить модель, в которой CD73 играет двойную роль в выживании CD8 + Т-клеток (рис. 5).В условиях сильной активации TCR экспрессия CD73 создает недостаток для CD8 + Т-клеток. Это связано с уменьшением выживаемости и более низкой эффекторной способностью CD8 + Т-клеток, что проявляется в снижении экспрессии Bcl-2 и CD25. С другой стороны, в условиях слабой активации TCR, например во время гомеостатической пролиферации в присутствии IL-15 и IL7, экспрессия CD73 дает преимущество для выживания CD8 + Т-клеток за счет предотвращения подавления регуляции CD127.Вклад каталитической функции этой эктонуклеотидазы и функции CD73 как молекулы, связанной с передачей сигнала в дифференцировке Т-лимфоцитов, еще предстоит выяснить.

Рисунок 5 . Предлагаемая модель роли CD73 в гомеостатической и антигенной стимуляции наивных CD8 + Т-клеток. CD73 снижает передачу сигналов, опосредованную Т-клеточным рецептором (TCR), и сдерживает экспрессию CD25 и Bcl-2 при антигенной стимуляции. В гомеостатических условиях CD73 предотвращает подавление активности CD127, опосредованное слабой стимуляцией TCR.

В настоящее время активно изучается роль аденозина в противоопухолевом ответе через его рецепторы и действие CD73. Наше исследование приобретает актуальность в свете возможного использования ингибиторов CD73 в адоптивной клеточной терапии, поскольку они обычно сопровождаются предшествующим лимфокондиционированием, либо химиотерапией, либо лучевой терапией. Это предшествующее лимфокондиционирование обеспечивает преимущества для проведения адоптивной клеточной терапии, поскольку оно устраняет регуляторные Т-клетки и другие клетки, которые подавляют иммунный ответ в опухоли, и увеличивает уровни IL-7 и IL-15, доступные для перенесенных клеток, воссоздавая гомеостатические условия. (Гаттинони и др., 2006; Restifo et al., 2012; Хинрихс и Розенберг, 2014). Мы пришли к выводу, что особое внимание следует уделять блокаде CD73, поскольку ее ингибирование может быть полезным за счет увеличения эффекторной способности CD8 + Т-клеток, но пагубно во время начальной гомеостатической фазы после процесса лимфокондиционирования.

Заявление о доступности данных

Исходные материалы, представленные в исследовании, включены в статью / дополнительные материалы, дальнейшие запросы можно направлять соответствующим авторам.

Заявление об этике

Исследование на животных было рассмотрено и одобрено CICUA-Universidad de Chile.

Авторские взносы

MVR и ST провели эксперименты и проанализировали данные. BP-T, PB, ER-Y, JS-A, PH и BM провели эксперименты, проанализировали данные и написали рукопись. AL, CC, DS, MB и MR разработали исследование и написали рукопись. Все авторы критически прочитали рукопись.

Финансирование

Эта работа была поддержана FONDECYT 1180385 (DS), FONDECYT 11

(MB), FONDEQUIP / EQM140016 (MB), CONICYT AFB 170004 (MR и AL), Европейской организацией молекулярной биологии, номер гранта IG3297 (CC), ANID 221 (BP -T), CONICYT 21151511 (ER-Y), ANID 21201553 (JS-A).

Конфликт интересов

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

Дополнительные материалы

Дополнительные материалы к этой статье можно найти в Интернете по адресу: https://www.frontiersin.org/articles/10.3389/fcell.2021.647058/full#supplementary-material

Список литературы

Акаши, К., Кондо, М., фон Фриден-Джеффри, У., Мюррей Р. и Вайсман И. Л. (1997). Bcl-2 восстанавливает Т-лимфопоэз у мышей с дефицитом рецептора интерлейкина-7. Cell 89, 1033–1041. DOI: 10.1016 / S0092-8674 (00) 80291-3

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Allard, D., Allard, B., Gaudreau, P.O., Chrobak, P., and Stagg, J. (2016). CD73-аденозин: мишень нового поколения в иммуноонкологии. Иммунотерапия 8, 145–163. DOI: 10.2217 / imt.15.106

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Антониоли, Л., Новицкий, С. В., Саксенмайер, К. Ф., Форнаи, М., Бландицци, К., Хаско, Г. (2017). Отключение CD73: способ повысить активность традиционных и таргетных противоопухолевых препаратов. Drug Discov. Сегодня 22, 1686–1696. DOI: 10.1016 / j.drudis.2017.06.005

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Беккер, Т. К., Уэрри, Э. Дж., Бун, Д., Мурали-Кришна, К., Антиа, Р., Ма, А. и др. (2002). Интерлейкин 15 необходим для пролиферативного обновления вирусоспецифичных Т-клеток памяти CD8. J. Exp. Med. 195, 1541–1548. DOI: 10.1084 / jem.20020369

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Боно М. Р., Фернандес Д., Флорес-Сантибанес Ф., Роземблатт М. и Саума Д. (2015). Эктонуклеотидазы CD73 и CD39 в дифференцировке Т-клеток: за пределами иммуносупрессии. FEBS Lett. 589, 3454–3460. DOI: 10.1016 / j.febslet.2015.07.027

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Брисеньо, П., Ривас-Яньес, Э., Роземблатт, М. В., Парра-Телло, Б., Фариас, П., и Варгас, Л. (2021). Эктонуклеотидаза CD73 ограничивает метаболическую пригодность CD8 + Т-клеток и противоопухолевую активность. Фронт. Cell Dev. Биол . 9: 638037. DOI: 10.3389 / fcell.2021.638037

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Cekic, C., Sag, D., Day, Y.-J., and Linden, J. (2013). Внеклеточный аденозин регулирует развитие наивных Т-клеток и периферическое обслуживание. J. Exp. Med. 210, 2693–2706. DOI: 10.1084 / jem.20130249

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Chen, S., Wainwright, D. A., Wu, J. D., Wan, Y., Matei, D. E., Zhang, Y., et al. (2019). CD73: новый контрольный пункт для иммунотерапии рака. Иммунотерапия 11, 983–997. DOI: 10.2217 / imt-2018-0200

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Чо, Б. К., Рао, В. П., Ге, К., Эйзен, Х. Н. и Чен, Дж. (2000). Стимулируемая гомеостазом пролиферация заставляет наивные Т-клетки дифференцироваться непосредственно в Т-клетки памяти. J. Exp. Med. 192, 549–556. DOI: 10.1084 / jem.192.4.549

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Фирон Д. Т., Мандерс П. и Вагнер С. Д. (2001). Замедленная дифференцировка, самообновляющийся лимфоцит памяти и вакцинация. Наука 293, 248–250. DOI: 10.1126 / science.1062589

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Фэн, Л. Л., Цай, Ю. К., Чжу, М. К., Син, Л. Дж., И Ван, X (2020).Функции инь и ян внеклеточного АТФ и аденозина в опухолевом иммунитете. Cancer Cell. Int. 20: 110. DOI: 10.1186 / s12935-020-01195-x

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Gattinoni, L., Klebanoff, C.A., Palmer, D.C., Wrzesinski, C., Kerstann, K., Yu, Z., et al. (2005). Обретение полной эффекторной функции in vitro парадоксальным образом снижает противоопухолевую эффективность in vivo адоптивно перенесенных CD8 + Т-клеток. J. Clin. Инвестировать. 115, 1616–1626. DOI: 10.1172 / JCI24480

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Gattinoni, L., Lugli, E., Ji, Y., Pos, Z., Paulos, C.M, Quigley, M. F., et al. (2011). Подмножество Т-клеток памяти человека со свойствами стволовых клеток. Nat. Med. 17, 1290–1297. DOI: 10,1038 / нм.2446

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Гаттинони, Л., Пауэлл, Д. Дж. Мл., Розенберг, С. А., и Рестифо, Н. П. (2006). Адоптивная иммунотерапия рака: опираясь на успех. Nat. Rev. Immunol. 6, 383–393. DOI: 10.1038 / nri1842

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Goldrath, A. W., Sivakumar, P. V., Glaccum, M., Kennedy, M. K., Bevan, M. J., Benoist, C., et al. (2002). Потребность в цитокинах для острой и базовой гомеостатической пролиферации наивных CD8 + Т-клеток и Т-клеток памяти. J. Exp. Med. 195, 1515–1522. DOI: 10.1084 / jem.20020033

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Hand, T. W., Cui, W., Jung, Y. W., Sefik, E., Joshi, N. S., Chandele, A., et al. (2010). Дифференциальные эффекты передачи сигналов STAT5 и PI3K / AKT на выживаемость эффекторных CD8 и Т-клеток памяти. Proc. Natl Acad. Sci. 107, 16601–16606. DOI: 10.1073 / pnas.1003457107

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Джейкобс, С. Р., Михалек, Р. Д., и Ратмелл, Дж. К. (2010).IL-7 необходим для гомеостатического контроля метаболизма Т-клеток in vivo . J. Immunol. 184, 3461–3469. DOI: 10.4049 / jimmunol.03

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Калия В., Саркар С., Субраманиам С., Хайнинг В. Н., Смит К. А. и Ахмед Р. (2010). Длительная экспрессия интерлейкина-2Ralpha на вирус-специфических CD8 + Т-клетках способствует дифференцировке терминального эффектора in vivo . Иммунитет 32, 91–103.DOI: 10.1016 / j.immuni.2009.11.010

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Келли, Э., Вон, А., Рафаэли, Ю., и Ван Парийс, Л. (2002). IL-2 и родственные цитокины могут способствовать выживанию Т-клеток за счет активации AKT. J. Immunol. 168, 597–603. DOI: 10.4049 / jimmunol.168.2.597

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Кондо, М., Такешита, Т., Хигучи, М., Накамура, М., Судо, Т., Нисикава, С., и др. (1994).Функциональное участие гамма-цепи рецептора IL-2 в комплексах рецептора IL-7. J. Sci . 263, 1453–1454. DOI: 10.1126 / science.8128231

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Кояс А., Тусер С., Кайхан М., Савас А. К., Акдемир И. и Чекич К. (2021 г.). Интерлейкин-7 защищает CD8 + Т-клетки от аденозин-опосредованной иммуносупрессии. Sci. Сигнал. 14: eabb1269. DOI: 10.1126 / scisignal.abb1269

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Куртулус, С., Трипати, П., Морено-Фернандес, М. Э., Шолл, А., Кац, Дж. Д., Граймс, Х. Л. и др. (2011). Bcl-2 позволяет эффекторным CD8 + Т-клеткам и Т-клеткам памяти переносить более высокую экспрессию Bim. J. Immunol. 186, 5729–5737. DOI: 10.4049 / jimmunol.1100102

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Link, A., Vogt, T. K., Favre, S., Britschgi, M. R., Acha-Orbea, H., Hinz, B., et al. (2007). Фибробластные ретикулярные клетки в лимфатических узлах регулируют гомеостаз наивных Т-клеток. Nat. Иммунол. 8, 1255–1265. DOI: 10.1038 / ni1513

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Linnemann, C., Schildberg, F.A., Schurich, A., Diehl, L., Hegenbarth, S. I., Endl, E., et al. (2009). Аденозин регулирует прайминг CD8 Т-клеток путем ингибирования передачи сигналов Т-клеточного рецептора, проксимального к мембране. Иммунология 128, e728–737. DOI: 10.1111 / j.1365-2567.2009.03075.x

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Лодольце, J.П., Бун, Д. Л., Чай, С., Суэйн, Р. Э., Дассопулос, Т., Треттин, С. и др. (1998). Рецептор IL-15 поддерживает лимфоидный гомеостаз, поддерживая самонаведение и пролиферацию лимфоцитов. Иммунитет 9, 669–676. DOI: 10.1016 / S1074-7613 (00) 80664-0

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Маррак П., Бендер Дж., Хильдеман Д., Джордан М., Митчелл Т., Мураками М. и др. (2000). Гомеостаз альфа-бета-TCR + Т-клеток. Nat. Иммунол. 1, 107–111.DOI: 10.1038 / 77778

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Mastelic-Gavillet, B., Navarro Rodrigo, B., Décombaz, L., Wang, H., Ercolano, G., Ahmed, R., et al. (2019). Аденозин опосредует функциональное и метаболическое подавление периферических и инфильтрирующих опухоль CD8 + Т-клеток. J. ImmunoTher. Рак 7: 257. DOI: 10.1186 / s40425-019-0719-5

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Охта, А., Горелик, Э., Прасад, С.Дж., Рончезе, Ф., Лукашев, Д., Вонг, М. К. и др. (2006). Аденозиновый рецептор A2A защищает опухоли от противоопухолевых Т-клеток. Proc. Natl. Акад. Sci. U.S. A. 103, 13132–13137. DOI: 10.1073 / pnas.0605251103

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Пипкин, М. Э., Сакс, Дж. А., Круз-Гильоти, Ф., Лихтенхельд, М. Г., Беван, М. Дж., И Рао, А. (2010). Интерлейкин-2 и воспаление вызывают различные программы транскрипции, которые способствуют дифференцировке эффекторных цитолитических Т-клеток. Иммунитет 32, 79–90. DOI: 10.1016 / j.immuni.2009.11.012

CrossRef Полный текст | Google Scholar

Raeber, M. E., Zurbuchen, Y., Impellizzieri, D., and Boyman, O. (2018). Роль цитокинов в Т-клеточной памяти для здоровья и болезней. Immunol. Rev. 283, 176–193. DOI: 10.1111 / imr.12644

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Рестифо, Н. П., Дадли, М. Э., и Розенберг, С. А. (2012). Адоптивная иммунотерапия рака: использование ответа Т-клеток. Nat. Rev. Immunol. 12, 269–281. DOI: 10.1038 / nri3191

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Schluns, K. S., Kieper, W. C., Jameson, S. C., and Lefrançois, L. (2000). Интерлейкин-7 опосредует гомеостаз наивных CD8 и Т-клеток памяти in vivo . Nat. Иммунол. 1, 426–432. DOI: 10.1038 / 80868

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Surh, C. D., и Sprent, J. (2008).Гомеостаз наивных Т-клеток и Т-клеток памяти. Иммунитет 29, 848–862. DOI: 10.1016 / j.immuni.2008.11.002

CrossRef Полный текст | Google Scholar

Tan, J. T., Dudl, E., LeRoy, E., Murray, R., Sprent, J., Weinberg, K. I., et al. (2001). IL-7 имеет решающее значение для гомеостатической пролиферации и выживания наивных Т-клеток. Proc. Natl Acad. Sci. США . 98: 8732. DOI: 10.1073 / pnas.161126098

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Тан, Дж.Т., Эрнст, Б., Кипер, В. К., Лерой, Э., Спрент, Дж., И Сур, К. Д. (2002). Интерлейкин (IL) -15 и IL-7 совместно регулируют гомеостатическую пролиферацию клеток CD8 + фенотипа памяти, но не требуются для клеток CD4 + фенотипа памяти. J. Exp. Med. 195, 1523–1532. DOI: 10.1084 / jem.20020066

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Вигано, С., Алатзоглу, Д., Ирвинг, М., Менетрие-Ко, К., Ко, К., Ромеро, П. и др. (2019). Аденозин в иммунотерапии рака для улучшения функции Т-клеток. Фронт. Иммунол. 10: 925. DOI: 10.3389 / fimmu.2019.00925

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Wojciechowski, S., Tripathi, P., Bourdeau, T., Acero, L., Grimes, H.L., Katz, J.D., et al. (2007). Баланс Bim / Bcl-2 имеет решающее значение для поддержания гомеостаза наивных Т-клеток и Т-клеток памяти. J. Exp. Med. 204, 1665–1675. DOI: 10.1084 / jem.20070618

CrossRef Полный текст | Google Scholar

Xue, H.-H., Kovanen, P.E., Pise-Masison, C. A., Berg, M., Radovich, M. F., Brady, J. N., et al. (2002). IL-2 негативно регулирует экспрессию α-цепи рецептора IL-7 в активированных Т-лимфоцитах. Proc. Natl. Акад. Sci. США 99, 13759–13764. DOI: 10.1073 / pnas.212214999

CrossRef Полный текст | Google Scholar

Elixir / Ecto migrate and rollback — Фрэнк МакГео — создатель интересных вещей

Определение моей собственной схемы базы данных для простого проекта Phoenix / Elixir для представления панель управления компании.Я начал со следующих объектов, которые хотел сохранить в реляционной базе данных:

Пользователь принадлежит к учетной записи, и у пользователя может быть одна или несколько ролей. я создал следующие файлы миграции (для каждой таблицы был один файл):

  # Таблица счетов
defmodule Dashboard.Repo.Migrations.CreateAccount do
  использовать Ecto.Migration

  def изменить делать
    создать таблицу (: учетные записи) сделать
      добавить: имя,: строка

      отметки времени
    конец
  конец
конец

# Таблица пользователей
Панель инструментов defmodule.Repo.Migrations.CreateUser сделать
  использовать Ecto.Migration

  def изменить делать
    создать таблицу (: пользователи) сделать
      добавить: имя,: строка
      добавить: имя пользователя,: строка, ноль: ложь
      добавить: адрес электронной почты,: строка
      добавить: password_hash,: строка

      добавить: account_id, ссылки (: accounts, on_delete:: ничего)
      отметки времени
    конец

    создать unique_index (: пользователи, [: имя пользователя])
  конец
конец

# Таблица ролей
defmodule Dashboard.Repo.Migrations.CreateRole do
  использовать Ecto.Migration

  def изменить делать
    создать таблицу (: роли) сделать
      добавить: имя,: строка

      отметки времени
    конец
  конец
конец

# User_roles (связь пользователя с более чем одной ролью)
Панель инструментов defmodule.Repo.Migrations.CreateUserRole сделать
  использовать Ecto.Migration

  def изменить делать
    создать таблицу (: user_roles) сделать
      добавить: идентификатор_пользователя, ссылки (: пользователи)
      добавить: идентификатор_роли, ссылки (: роли)

      отметки времени
    конец
  конец
конец
  

Так как я только начинаю, я как бы наткнулся на этот набор миграций, поэтому у меня чтобы отменить это более одного раза. Ecto и mix делают процесс разработки безболезненным. Я могу применить миграции с помощью:

  ▶ смешайте ecto.migrate

16: 21: 05.920 [info] == Запуск панели управления.Repo.Migrations.CreateAccount.change / 0 вперед

16: 21: 05.920 [info] создать учетные записи таблиц

16: 21: 05.951 [info] == Перенос за 0,0 с

16: 21: 05.998 [info] == Запуск Dashboard.Repo.Migrations.CreateUser.change / 0 вперед

16: 21: 05.998 [info] создать таблицу пользователей

16: 21: 06.002 [информация] создать индекс users_username_index

16: 21: 06.003 [info] == Перенос за 0,0 с

16: 21: 06.020 [info] == Запуск Dashboard.Repo.Migrations.CreateRole.change / 0 вперед

16: 21: 06.020 [info] создать таблицы ролей

16: 21: 06.022 [info] == Перенесено в 0.0 с

16: 21: 06.035 [info] == Запуск Dashboard.Repo.Migrations.CreateUserRole.change / 0 вперед

16: 21: 06.035 [информация] создать таблицу user_roles

16: 21: 06.038 [info] == Перенос за 0,0 с
  

И затем, проверяя Postgres с помощью psql, я вижу:

  ▶ psql dashboard_dev
psql (9.5.3)
Введите «help» для получения справки.

dashboard_dev = # \ dt public. *
               Список отношений
 Схема | Имя | Тип | Владелец
-------- + ------------------- + ------- + ----------
 общественный | счета | стол | Postgres
 общественный | роли | стол | Postgres
 общественный | schema_migrations | стол | Postgres
 общественный | user_roles | стол | Postgres
 общественный | пользователи | стол | Postgres
(5 рядов)
  

Таблица schema_migrations содержит все примененные миграции. экто.перенести задачу в базу данных.

  dashboard_dev = # выберите * из schema_migrations;
    версия | Insert_at
---------------- + ---------------------
 201609041 | 2016-09-04 20:21:05
 201609041 | 2016-09-04 20:21:06
 201600622 | 2016-09-04 20:21:06
 201604651 | 2016-09-04 20:21:06
(4 ряда)
  

Версия — это номер, созданный на основе текущей отметки времени. Откатить вы можете сделать:

  ▶ смешайте экто. Откат

16:24:00.111 [info] == Запуск Dashboard.Repo.Migrations.CreateUserRole.change / 0 назад

16: 24: 00.111 [информация] выпадающая таблица user_roles

16: 24: 00.115 [info] == Перенос за 0,0 с
  

И Ecto откатит последнюю миграцию. Чтобы откатить все, что было применено к база данных, которую вы можете сделать:

  ▶ микс ecto.rollback - все

16: 24: 39.191 [info] == Запуск Dashboard.Repo.Migrations.CreateRole.change / 0 назад

16: 24: 39.191 [информация] выпадающая таблица ролей

16: 24: 39.194 [info] == Перенесено в 0.0 с

16: 24: 39.223 [info] == Запуск Dashboard.Repo.Migrations.CreateUser.change / 0 назад

16: 24: 39.223 [info] drop index users_username_index

16: 24: 39.224 [информация] выпадающая таблица пользователей

16: 24: 39.225 [info] == Перенос за 0,0 с

16: 24: 39.241 [info] == Запуск Dashboard.Repo.Migrations.CreateAccount.change / 0 назад

16: 24: 39.241 [info] drop table accounts

16: 24: 39.242 [info] == Перенос за 0,0 с
  

Теперь вы можете видеть, что все таблицы исчезли с:

  ▶ psql dashboard_dev
psql (9.5.3)
Введите «help» для получения справки.

dashboard_dev = # \ dt public. *
               Список отношений
 Схема | Имя | Тип | Владелец
-------- + ------------------- + ------- + ----------
 общественный | schema_migrations | стол | Postgres
(1 ряд)

dashboard_dev = # выберите количество (*) из schema_migrations;
 считать
-------
     0
(1 ряд)
  

Другие варианты использования описаны в прекрасной документации по адресу https://hexdocs.pm/ecto/Mix.Tasks.Ecto.Migrate.html и https://hexdocs.pm/ecto/Mix.Tasks.Ecto.Rollback.html

Часовые пояса в PostgreSQL, Elixir и Phoenix

Работать с часовыми поясами сложно в любой среде, с которой я работал.Часть проблема в том, что часовые пояса — это политическая конструкция, а не географический, и поэтому они меняются всякий раз, когда власти делают такое решение. Это происходит чаще, чем вы считать.

Чтобы отображать местное время в разных часовых поясах, нашим компьютерам нужен актуальная база данных. Обычно это предоставляется пакетом tzdata (или аналогично) в системах Linux.

Хотя это нормально для программ, которые по определению могут полагаться на Данные о часовых поясах на уровне ОС, многие программы или среды программирования решил поступить иначе.Сюда входит Эликсир — мультиплатформенная среда.

Часть путаницы, а также источник многих трудных для отладки ошибок, довольно неудачная система типов SQL.

По умолчанию при использовании Ecto при переносе вашей базы данных будет использоваться тип SQL timestamp . Если ты посмеешь проверьте документацию по PostgreSQL сайт, вы узнаете, что отметка времени на самом деле является «отметкой времени без часового пояса».

Что это значит? Вкратце: этот тип данных будет интерпретироваться по-разному, в зависимости от настроек часового пояса клиентов, которые подключаются на сервер PostgreSQL.

Ecto использует Postgrex, a драйвер подключения к базе данных для Elxir, который не похож на многие другие Драйверы PostgreSQL. Вместо того, чтобы полагаться на текстовый протокол, он использует — более безопасный и производительный — бинарный протокол.

Побочным эффектом использования двоичного протокола является то, что все Отметки времени интерпретируются как UTC, потому что часовой пояс клиента всегда устанавливается в UTC.

Зная вышесказанное, можно было предположить, что в таком случае ваши даты в базе данных всегда хранится в UTC.Верно?

Неправильно. Хотя это будет верно, когда вы подключитесь к PostgreSQL со своего Приложение Эликсир, как только вы подключаетесь с помощью другого клиента ( psql , драйвер Ruby и т. Д.), Проблемы начнут закрадываться. SQL запросы типа:

  SELECT * FROM events WHERE events.start_date  

будет иметь другое значение, когда вы находитесь в часовом поясе Европа / Варшава , и очень сильно отличается, когда вы находитесь в PDT (Калифорния, США), потому что разницы в 9 часов.Если у вас есть сценарий отчетности или обслуживания которые вы запускаете с этой базой данных, в зависимости от локали вашего клиента настройки, вы пропустите больше или меньше событий из запроса или включите нежелательные в результатах. Это будет правильно, только если ваш клиент настройки были UTC.

Как исправить эту проблему? Используйте тип данных timestamptz в PostgreSQL, который является ярлыком для отметки времени с часовым поясом .

Именование здесь снова очень запутанное. Отметка времени с часовым поясом означает, что , а не , означает, что записи в базе данных переносят любые информация о часовом поясе.Этот тип предполагает, что метка времени находится в часовом поясе UTC .

По моему скромному мнению, безопаснее сделать приложение Elixir / Ecto используйте тип данных timestamptz вместо временных меток по умолчанию. Сделать это, вы должны записать свои миграции в такой форме:

  create table (: events) do
  добавить: заголовок,: строка
  добавить: start_date,: timestamptz
  добавить: end_date,: timestamptz

  отметки времени (тип:: отметка времени)
end  

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

Обработка часовых поясов в Elixir

Исторически в Elixir (и Erlang) не было никакой обработки часовых поясов, ни встроенных типов для хранения этой информации. Когда Экто был первым разработали, авторы придумали собственные типы данных, такие как Ecto.DateTime, который отображает тип данных из базы данных в пользовательский тип в схеме Ecto и ваш Elixir код.

Больше не используйте эти типы. Эликсир теперь встроен DateTime, который вы можете использовать вместо.

Также есть NaiveDateTime.В разница между ними в том, что «наивная» версия не имеет time_zone , что означает, что информация о зоне не переносится.

Когда ваша база данных всегда хранит метки времени в часовом поясе UTC, я думаю имеет смысл использовать то же предположение в ваших схемах Ecto:

  схемы "события" делают
  ...
  поле: start_at,: utc_datetime
  поле: end_at,: utc_datetime
  отметки времени (тип:: utc_datetime)
конец  

Таким образом, вы можете предположить, что все временные метки в ваших схемах Ecto, всегда находятся в часовом поясе UTC.Типы значений в этих полях будут всегда DateTime с time_zone , установленным на UTC, всякий раз, когда вы пишете или прочтите это.

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

Боюсь, вам нужны дополнительные пакеты с эликсиром. Эликсир не приходит со многими функциями календаря он определяет только соответствующие данные конструкции. Подробные функции управления часовыми поясами реализованы внешние библиотеки (Timex или Calendar).

Тот, который кажется мне сейчас моим выбором, просто называется Календарь. Вам нужно будет добавить это в deps:

  defp deps do
  [{: calendar, "~> 0.17.2"},]
конец  

, а также запустите его приложение OTP:

  def application do
  [приложения: [: календарь]]
конец  

Календарь полагается за кулисами пакет tzdata, который предоставляет базу данных часовых поясов. Более того, он периодически проверяет изменения во времени зон и обновляет свою локальную базу данных, чтобы отразить эти изменения.Симпатичный милая.

Phoenix и пользователи Интернета

Когда я хочу отображать временные метки, преобразованные в местный часовой пояс для моего пользователей, я стараюсь создать границу между моим кодом на Эликсире и HTML / данные формы. Предполагается, что что-либо в контроллерах и ниже для простоты даты будут указаны в формате UTC. Все, что видит пользователь и отправляет обратно на сервер - может быть в их местном часовом поясе.

Помощник простого просмотра для отображения меток времени в местном часовом поясе пользователя может быть следующим образом:

  def format_timestamp (nil) do
  ноль
конец

def format_timestamp (timestamp, time_zone) делать
  отметка времени
  |> shift_zone! ("Европа / Варшава")
  |> Календарь.Strftime.strftime! ("% D /% m /% Y% H:% M")
конец

defp shift_zone! (nil, time_zone) делать
  ноль
конец

defp shift_zone! (timestamp, time_zone) делать
  отметка времени
  |> Calendar.DateTime.shift_zone! (Часовой_ пояс)
конец  

Я также разработал механизм, чтобы мои пользователи могли указывать часовой пояс при добавлении меток времени в формы. В нашем примере У события есть даты начала и окончания. Мои пользователи могут указывать часовой пояс информация, использующая эту измененную версию стандарта datetime_select, который принимает те же аргументы и ведет себя одинаково, но имеет дополнительный раскрывающийся список для часового пояса (его можно заменить скрытым полем).В код для помощника:

  def date_time_and_zone_select (form, field, opts \\ []) do
  time_zone = Keyword.get (opts,: time_zone) || "Etc / UTC"

  value = Keyword.get (opts,: value, Phoenix.HTML.Form.input_value (form, field) || Keyword.get (opts,: default))
          |> shift_zone! (часовой_ пояс)


  default_builder = fn b ->
    ~ е "" "
    <% = b. (: год, [])%> / <% = b. (: месяц, [])%> / <% = b. (: день, [])%>
    -
    <% = b. (: час, [])%>: <% = b. (: минута, [])%>
    <% = б.(: часовой_ пояс, [])%>
    "" "
  конец

  builder = Keyword.get (opts,: builder) || default_builder

  построитель. (datetime_builder (форма, поле, date_value (значение), time_value (значение), time_zone, opts))
конец

@месяцы [
  {"1 января"},
  {"Февраль", "2"},
  {"Март", "3"},
  {"Апрель", "4"},
  {"5 мая"},
  {"Июнь", "6"},
  {"Июль", "7"},
  {"Август", "8"},
  {"Сентябрь", "9"},
  {"Октябрь", "10"},
  {"Ноябрь", "11"},
  {"Декабрь", "12"},
]

map = & Enum.map (& 1, fn i ->
  pre = если я <9, сделать: "0"
  {"# {pre} # {i}", i}
конец)

карта @ дней.(1..31)
@hours map. (0..23).
Карта @minsec. (0..59)

defp datetime_builder (форма, поле, дата, время, часовой_ пояс, родительский) сделать
  id = Keyword.get (родительский,: id, input_id (форма, поле))
  name = Keyword.get (родительский,: имя, input_name (форма, поле))

  fn
    : год, выбирается, когда дата! = ноль ->
      {год, _, _} =: erlang.date ()
      {value, opts} = datetime_options (: год, год-5..год + 5, идентификатор, имя, родитель, дата, варианты)
      select (: datetime,: год, значение, варианты)
    : месяц, выбирается, когда date! = nil ->
      {значение, opts} = datetime_options (: месяц, @months, id, имя, родитель, дата, варианты)
      select (: datetime,: month, value, opts)
    : day, выбирает, когда date! = nil ->
      {значение, opts} = datetime_options (: день, @ дней, идентификатор, имя, родитель, дата, варианты)
      select (: datetime,: день, значение, варианты)
    : час, выбирается, когда время! = ноль ->
      {значение, opts} = datetime_options (: час, @ часы, идентификатор, имя, родитель, время, варианты)
      select (: datetime,: час, значение, opts)
    : минута, выбирается, когда время! = ноль ->
      {значение, opts} = datetime_options (: минута, @minsec, id, имя, родитель, время, варианты)
      select (: datetime,: minute, value, opts)
    : second, выбирает, когда time! = nil ->
      {value, opts} = datetime_options (: second, @minsec, id, name, parent, time, opts)
      select (: datetime,: second, value, opts)
    : time_zone, opts ->
      {value, opts} = timezone_options (: time_zone, parent [: zone_list] || Tzdata.zone_list (), id, name, time_zone, opts)

      если parent [: hide_time_zone] == true сделать
        hidden_input (: datetime,: time_zone, Keyword.merge (opts, [значение: time_zone]))
      еще
        выберите (: datetime,: time_zone, value, opts)
      конец
  конец
конец

defp timezone_options (тип, значения, id, имя, time_zone, opts) делать
  суфф = Atom.to_string (тип)
  {value, opts} = Keyword.pop (opts,: параметры, значения)

  {ценить,
    выбирает
    |> Keyword.put_new (: id, id <> "_" <> суфф)
    |> Ключевое слово.put_new (: имя, имя <> "[" <> суфф <> "]")
    |> Keyword.put_new (: значение, часовой_ пояс)}
конец


defp datetime_options (тип, значения, идентификатор, имя, родительский элемент, datetime, opts) делать
  opts = Keyword.merge Keyword.get (родительский, тип, []), opts
  суфф = Atom.to_string (тип)

  {value, opts} = Keyword.pop (opts,: параметры, значения)

  {ценить,
    выбирает
    |> Keyword.put_new (: id, id <> "_" <> суфф)
    |> Keyword.put_new (: имя, имя <> "[" <> суфф <> "]")
    |> Ключевое слово.put_new (: значение, Map.get (дата и время, тип))}
конец

defp time_value (% {"час" => час, "минута" => мин} = карта),
  do:% {час: час, минута: мин, секунда: Map.get (map, "second", 0)}
defp time_value (% {час: час, минута: мин} = карта),
  do:% {час: час, минута: мин, секунда: Map.get (карта,: секунда, 0)}

defp time_value (ноль),
  do:% {час: ноль, минута: ноль, секунда: ноль}
defp time_value (другое),
  do: raise (ArgumentError, "нераспознанное время # {проверить другое}")

defp date_value (% {"год" => год, "месяц" => месяц, "день" => день}),
  do:% {год: год, месяц: месяц, день: день}
defp date_value (% {год: год, месяц: месяц, день: день}),
  do:% {год: год, месяц: месяц, день: день}

defp date_value ({{год, месяц, день}, _}),
  do:% {год: год, месяц: месяц, день: день}
defp date_value ({год, месяц, день}),
  do:% {год: год, месяц: месяц, день: день}

defp date_value (ноль),
  do:% {год: ноль, месяц: ноль, день: ноль}
defp date_value (другое),
  do: raise (ArgumentError, "unrecognized date # {inspect other}")  

end

Это приводит к отправке формы дополнительного параметра при отправке, в полях отметок времени.Вместо

 % {"year" => "2017", "month" => "5", "day" => "1", "hour" => "12", "minute" => "30 "}  

сервер получает из формы отправить дополнительный time_zone параметр:

 % {" год "=>" 2017 "," месяц "=>" 5 "," день "=>" 1 "," час "=>" 12 "," minute "=>" 30 "," time_zone "=>" Europe / Warsaw "}  

Я создал простой плагин, который рекурсивно проходит через все параметры, обнаруживает эти настраиваемые карты из 6 элементов с отметками времени и заменяет их собственными DateTime Elixir, правильно сдвинутыми на UTC. часовой пояс.Полный код:

  defmodule ShiftToUtc do
  @behaviour Plug

  def init ([]), выполните: []

  импорт Plug.Conn

  def call (% Plug.Conn {} = conn, []) делать
    new_params = conn.params |> shift_to_utc! ()

    % {conn | params: new_params}
  конец

  defp shift_to_utc! (% {__ struct__: mod} = struct) когда is_atom (mod) do
    структура
  конец

  defp shift_to_utc! (% {"год" => год, "месяц" => месяц, "день" => день, "час" => час, "минута" => минута, "time_zone" => time_zone} = карта ) делать
    {год, _} = целое число.анализ (год)
    {месяц, _} = Integer.parse (месяц)
    {day, _} = Integer.parse (день)
    {час, _} = Integer.parse (час)
    {минута, _} = Integer.parse (минута)

    second = case Map.get (map, "second", 0) делать
      0 -> 0
      строка ->
        {integer, _} = Integer.parse (строка)
        целое число
    конец

    {{год, месяц, день}, {час, минута, секунда}}
    |> Calendar.DateTime.from_erl! (Часовой_ пояс)
    |> Calendar.DateTime.shift_zone! ("UTC")
  конец

  defp shift_to_utc! (% {} = param) делать
    Enum.уменьшить (параметр,% {}, fn ({k, v}, acc) ->
      Map.put (acc, k, shift_to_utc! (V))
    конец)
  конец

  defp shift_to_utc! (параметр) когда is_list (параметр) do
    Enum.map (параметр & shift_to_utc! / 1)
  конец

  defp shift_to_utc! (параметр) делать
    парам
  конец
конец  

Чтобы использовать его, добавьте его в нужные контроллеры или в браузер конвейер в маршрутизаторе . ex .

Альтернативный подход - написать собственный тип Ecto, который сменить часовой пояс перед сохранением записи в базе данных.Пример такого нестандартный тип Ecto, любезно предоставленный Михалом Muskała представлена ​​ниже:

  defmodule ZonedDateTime do
  @behaviour Ecto.Type

  тип def, выполните:: utc_datetime

  def cast ({"time_zone" => time_zone} = map) делать
    с {: ok, naive} <- Ecto.Type.cast (: naive_datetime, map),
         {: ok, dt} <- Calendar.DateTime.from_naive (time_zone) делать
      {: хорошо, Calendar.DateTime.shift_zone! (dt, "Etc / UTC")}
    еще
      _ ->: ошибка
    конец
  конец
  def cast (значение), do: Ecto.Type.cast (: utc_datetime, значение)

  def dump (значение), do: Ecto.Type.dump (: utc_datetime, значение)

  def load (значение), do: Ecto.Type.load (: utc_datetime, значение)
конец  

Временные метки с особыми потребностями

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

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

Хотя типы Elixir позволяют это сделать, PostgreSQL не позволяет дефолт. Общий подход состоит в том, чтобы сохранить дополнительный столбец start_date_time_zone в вашей таблице событий .

К счастью, нам не нужно делать это вручную. Есть Библиотека Calecto, которая предоставляет способ использовать примитивный тип : calendar_datetime в вашем миграции. За кулисами он создает составной тип PostgreSQL, в котором хранится информация о временной метке и часовом поясе .Когда бы ты не сохранить информацию в базе данных, которая содержит метку времени с зоной информации, будет одинаковая метка времени с той же информацией о зоне. возвращается позже, когда вы используете схему для его чтения.

Это особенно полезно, если вы хотите, чтобы событие start_date не изменится в местном часовом поясе, несмотря на часовой пояс изменения. Это может иметь значение, если ваши пользователи находятся в Турции или Венесуэле, или даты вообще далеко в будущем.

Другой особый случай - часы дня.PostgreSQL имеет выделенный тип из раз (с Timzeone и без - конечно!) для хранения информации например, часы работы магазинов и т. д. Когда вы храните эту информацию в UTC в базе данных, вы можете оказаться в удивительной ситуации, если ваши пользователи живут в странах с переходом на летнее время. В таких случаях вы должен сохранить информацию о зоне и убедиться, что вы отображаете информация правильно.

Сводка

Существует много недоразумений относительно того, какие библиотеки и типы данных использовать когда вы пишете приложения на Эликсире.Самый простой подход, который работает для мне нужно:

  • использовать timestamptz в PostgreSQL
  • используйте : utc_datetime в схемах Ecto, которые сопоставляются с исходным кодом Elixir DateTime с зоной, установленной на UTC
  • конвертировать временные метки в локальную зону при отображении пользователю
  • написать настраиваемую дату / время / зону выбрать для замены стандартной, которая поставляется с Фениксом
  • использовать настраиваемый плагин для определения параметров формы, которые переносятся в зону информации и переместите их в UTC, прежде чем переходить к контроллер / набор изменений

Сообщение Хуберта Лепицки

Хуберт является партнером AmberBit.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *