Обновление файлов ассетов что делать

Обновлено: 07.07.2024

К сожалению, Cyberpunk 2077 невозможно назвать завершенным проектом и польские разработчики из CD Projekt Red еще в течение неопределенного промежутка времени будут устранять различные баги, недоработки и просто плохую реализацию некоторых элементов игры. Однако это не помешало мододелам начать выпускать моды, которые не только меняют различные аспекты игрового процесса, но и в определенной степени решают вышеупомянутые недоработки.

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

А начнем мы не совсем с модов, но в определенной степени с улучшения различных вещей. На всякий случай предварительно сделайте копию (бекап) файлов, которые будете менять:

  • В папке Cyberpunk 2077\r6\config ищем файл inputContexts, открываем любым удобным редактором. В нем ищем строчку - hold action="craft_item", справа от нее меняем значение - timeout="0.8" на более низкое. Это ускоряет процесс крафта, так как изначально разработчики выбрали метод удержания кнопки в течение определенного промежутка времени.
  • Все в том же файле inputContexts ищем строчку - hold action="disassemble_item" (расположена сразу над крафтом), изменив значение timeout справа от нее, вы ускорите процесс уничтожения \ разбора снаряжения.

Better Controls Menu

Добавляет возможность переназначить кнопки для ряда игровых действий и элементов интерфейса. Например, при помощи мода можно изменить кнопку для пропуска реплик диалога или передвижения пешком. Открыв настройки, новые варианты отмечаются небольшой припиской “NOT LOCALIZED” (связано с невозможностью добавить файл локализации). Для простоты понимая я их собрал в одну картинку которая расположена ниже.

Установка: копируем с заменой все файлы из архива в папку Cyberpunk 2077\r6\config\, чтобы выключить мод просто удаляем эти файлы и запускаем проверку клиента. Также об этом автор не упоминал, но скорее всего можно просто сделать бекап папки config и просто скопировать все файлы из нее.

ВНИМАНИЕ: автор мода указал, что замена файлов может привести к повреждению настроек, если я правильно понял, они просто будут сброшены до стандартных. Лично у меня этого не случилось, вот только компуктеры у всех разные.


Better Vehicle Handling

Если вам вдруг кажется, что с управлением транспортным средством в мире Cyberpunk 2077 что-то не так, данный мод скорее всего поможет избавиться от этого чувства. Судя по всему, автор немного изменил принцип работы и настройки ручного тормоза, сделав его, так сказать, более “отзывчивым”. Благодаря этому управление транспортом немного улучшается, особенно на поворотах (хотя честно говоря, я не заметил уж прям особо большой разницы).

Установка: поместить файл в папку Cyberpunk 2077\engine\config\platform\pc, чтобы отключить мод удаляем файл. На момент написания статьи можно выбрать 1 из 3-х вариантов мода, где версия 0.3 является последней (ее я вам и советую). Так как мод находится в стадии разработки (WIP), лучше всего периодически проверять страницу на наличие новых версий.

Alternate Crowd Behavior

Это, так сказать, целый сборник, направленный на улучшение толпы города (поведение, разнообразие, скорость появления новых НПЦ, обнаружение различных препятствий \ игрока), улучшение дорожного трафика, улучшение AI противников, а также скорость подгрузки ассетов.

Мод разделен на несколько составляющих, из которых можно выбрать только нужные вам вещи:

  • Altcrowdsdefaultdespawn, altcrowdsfastdespawn, altcrowdsslowdespawn - это по сути одинаковые файлы с разным временем “обновления” НПЦ.
  • Altstreaming - увеличивает скорость подгрузки ассетов, что, как я понял, важно для быстрого “обновления” толпы. Может оказать влияние на FPS.
  • Altgeneralai - небольшие улучшения AI. Многие отмечают, что противники с этим модом становятся чуточку умнее и начинают активнее искать игрока в процессе боя (я это не особо заметил). Однако также некоторые отмечают проблемы в виде вылетов и багов (я не заметил). Как по мне, это опциональный файл.
  • Alttraffic - улучшение трафика на дорогах. С ним также связаны определенные проблемы (читайте на странице моды) и я его вообще не ставил.

Установка: распаковываем архив и затем копируем только нужные файлы в Cyberpunk 2077\engine\config\platform\pc.

Better Minimap

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

Установка: так как помимо самого мода необходимо скачать программу CP77Tools и windows runtime, советую посмотреть данное видео.

Arasaka Appearance Updater

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

Установка: перейдя на страницу с модом, на момент написания статьи вам необходимо скачать два первых архива (автор забыл запихнуть в архив с новой версией несколько основных файлов, необходимых для работы). Распаковываем оба архива в отдельные папки и из версии 2.3.3 переносим все файлы, кроме exe, в папку с версией 2.3.4 (увы, но это небольшие танцы с бубном ввиду невнимательности человека).


3th person mod

Опциональный мод на любителя, работает не совсем корректно. Позволяет активировать режим камеры от третьего лица (за спиной персонажа), но так как мод находится в очень ранней и сырой версии, присутствует множество багов с текстурой персонажа (они исключительно визуальные и не влияют на стабильность клиента). Я бы отнес этот мод больше к забавным, так как играть с режимом 3th person камеры можно разве что гуляя по городу. В определенный момент времени он возможно станет нормальным (играбельным), но увы, это зависит только от усилий и желания автора.

Установка: скачиваем утилиту Cyber Engine Tweaks (сразу скажу у меня с ней возникли небольшие проблемы) по ссылке, распаковываем архив и копируем папку bin в корень игры. Далее скачиваем мод, снова распаковываем архив и также переносим все файлы (кроме readme) в корень. Наконец, запускаем Киберпанк и загружаем любое сохранение, чтобы перевести камеру в режим от 3 лица нажимаем кнопку B. Для деактивации утилиты и мода ищем скопированные файлы и удаляем.


Draw distance boost

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

Итак, переходим в папку Cyberpunk2077\engine\config\platform\pc и создаем txt файл под названием DrawDistanceBoost, в который помещаем следующие строчки:

В теории вы можете поставить буст хоть 100, но при повышении порога в 40-50 может появиться эффект мерцания объектов (чаще всего замечал на щитах с рекламой) или начнут пропадать текстуры местности. Несмотря на все возможные последствия, я все же остановился на значении 60, так как не переношу POP IN эффект (возникающие из пустоты текстуры, объекты).

Третий видео дневник от разработчиков проекта Skyblivion. The Elder Scrolls V: Skyrim показал нам определение хорошего дизайна уровней и окружающей среды, и Skyblivion стремится усовершенствовать эту формулу. Разработчики демонстрируют работу по обновлению ассетов, окружения и интерьеров Oblivion для проекта Skyblivion.

Skyblivion - модификация, цель которой перенести The Elder Scrolls IV: Oblivion на движок The Elder Scrolls 5: Skyrim. Ландшафт и интерьеры оригинального Oblivion страдали от однообразия из-за программной генерации. Разработчики Skyblivion исправляют это вручную, переделывая его, добавляя много новых деталей и добавляя уникальные климатические зоны в разные части Сиродила. Все игровые ассеты получат редизайн, а некоторые уникальные оружие и броня обзаведутся своими уникальными моделями. Модификация уже давно находится в разработке, однако дата выхода не известна. Авторы обещают сделать ее полностью бесплатной, но вам понадобится лицензионные четвертая и пятая часть свитков со всеми дополнениями.


Иллюзия

Когда случайно крикнул в городе

The Elder Scrolls 5: Skyrim: Сохранение/SaveGame (Достижение "Побоку"| Achievement "Sideways") [Steam]

The Elder Scrolls 5: Skyrim: Сохранение/SaveGame (Достижение "Побоку"| Achievement "Sideways") [Steam]


Быстрее выйдет официальный ремейк от беседки, чем такие проекты.


Уж лучше бы сделали мод на Minecraft уже, там хоть точно на графику не смотрят))
Хотя и в нее уже добавили трассировку лучей))

А эту закончат когда Star Citizen выйдет.


мод на скайрим для майнкрафта давно есть


Ну да, схема похоже аналогичная! Про Скайбливион около 10 лет уже слышу :)


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


Да, да, конечно он выйдет через.. никогда

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


Да там авторы не могут дождаться релиза ТЕС6, для того, чтобы заявить, что теперь "переносят игру на новый движок, по этому релиз в скором времени опять не ждите". Прокатывает же такое с морровиндом на движке облы/ская.


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


Морровинд вышел на движке облы и проходится до конца(+ его не забросили, патчи до сих пор выходят). Есть все основные сюжетные ветки + DLC и доп. задания.

Круто но я с установкой не разобрался,вечно вылетало. не помню есть ли там русик текста


Тут тема такая - надо потихонечку начинать готовиться к выпуску мода Скайрима под движок Starfield.


Разумисты раскрыли гениальную схему развода на донаты, вы всерьез думаете что они там в золоте купаются?) Очнитесь там донатов кот плакал


Очередной демонстративный ролик на тему "возьмите нас на работу - вот наше портфолио".

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


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

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


интересно сколько оперативы она потребует?


Зачем ребята тратят столько сил и времени на это? Делать ремейк Oblivion на движке Skyrim вообще нет никакого смысла. Там не такая разница в графике, геймплее, механике. Вот ремейк Morrowind (Skywind) я поддерживаю. Если к тому же сумеют вернуть механику Morrowind, избавившись от автолевеллинга, квесты без компаса, крафтинг магии, классического вида интерфейс и т.п. будет вообще замечательно.


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

Что касается разницы то о многом можно поспорить. Графически с Скайрим там 2 разных стиля, и 70% игры почти одинаковые данжи и поля, и смотреть на те 3 тайл сета что они используют для всех данжей надоедает уже к 5 данжу, да и наземный мир по большенству отличался лишь типом деревьев. Геймплей по большому близок к тому что был в море, минус конечно шансы на поподание, да и система прокачки заметный влияла на все, от дамага оружия, до дальности полета стрелы и скорости натяжения лука, до даже высоты прыжка и скорости бега, все это было убрано из Скайрим и по сути везде заменено на перки, а сам уровень навыка пускай и играет ту же роль но только в плане увиличения чисел, скорость атаки и каста остаться прежней если не брать перки которые влияют на скорость. Механики опять же ближе больше к мору чем к Скайрим, плюс акробатика и атлетика ещё существовали как стат в игре, и возможность запрыгнуть на огромный камень от врагов, или моя любимая часть когда любой баф с выше 100 акробатики позволял пережить падение с любой высоты, или по просто убежать от врагов остаться только за некоторыми парками а чаще всего модами в Скайрим, ещё основной механикой Обливиона собственно были эти самые врата Обливион, с их камнями которыми можно зачеровать любое снаряжение, конечно это есть и в скайрим, но в Обливион все же было больше рандома. Ещё для большенства фанатов Обливион запомнились квесты которые были на порядок интиресней чем даже в Скайрим, ну а гильдий воров и темное братство это вообще отдельная тема для обсуждения, лучше их нет не в 1 из частей.

Так что не так уж они и далеки друг от друга, и смысл делать и скай-обливион и скай-винд есть, и бо фанаты есть с обоих сторон.


Ну Вы расписали какие то механические особенности, но все же ремейк Morrowind более оправдан чем ремейк Oblivion. В Облу и нынче можно сыграть не скрипя зубами. А Morrowind уже смотрится безнадежно устаревшей и страшненькой. Мир деревянных буратинок) Модами там особо не спасешь ситуацию. Хотя бы в визуальном плане она куда больше нуждается в ремейке.


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

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

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


Не волнуйся, Skywind ты не увидишь никогда. Это проект для красивых видосиков и галочки в портфолио "Работа над Skywind". Уровень ждунства еще хуже чем у Star Citizen - в него то можно играть и пощупать хотя бы частично.


Ох, хорошо выглядит всё! Но доберётся ли это до релиза. Ну, будем верить!




Всё это я слышал уже много раз. Так и будут обновлять ассеты, пока не выйдет The Elder Scrolls VI.

Разбудите, когда будет релиз


Ага, жаль, что этот мод никогда не выйдет, но вы продолжайте верить и на что-то надеяться


Да, Обливиончик и так довольно сносно выглядит. Только год назад переигрывал его на своей GF9800, на максимальных настройках выглядит шикарно.

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

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

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

Стоит ли их использовать? Как? И где их брать? Узнаете в этом материале.

Ассет (asset) — это набор ресурсов, которые вы можете использовать в своей игре. Потенциально в эту категорию может входить всё что угодно, но обычно под ними имеются в виду готовые программные модули, спрайты, модели, анимации, звуки.

Чаще всего такие наборы объединены какой-то конкретной областью применения, например одна модель с множеством анимаций, система инвентаря, набор спрайтов в схожем стиле. Но это может быть и не так.

Готовые ассеты — это такие наборы, которые лежат в готовом виде в сети и вы можете их приобрести на каких-то условиях и использовать. Впрочем, это можете сделать не только вы, но и все остальные.

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

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

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

Почти у всех готовых ассетов указана лицензия. За платные ассеты придётся заплатить. За бесплатные ассеты нужно будет указывать авторство, если не указано обратное. Поэтому конечно мало что вам достанется бесплатно.

Но есть исключение — лицензия Creative Commons, по которой ассеты могут распространяться бесплатно. В мире очень много апологетов свободных ресурсов, набивающих руку начинающих специалистов и просто добрых людей, которые готовы распространять свои работы по этой лицензии. Отдельно стоит упомянуть лицензию CC0 — "Никаких прав не предусмотрено", то есть вы можете делать с этими работами всё что угодно и как угодно.

Чаще всего ассеты представлены в удобном автору виде, а не в виде, удобному вам. Поэтому ассеты придётся адаптировать под свой проект и расширять, будьте к этому готовы. Да, это всё ещё проще, чем делать самому с нуля, но навык приобрести придётся.

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

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

Ну и самое главное — отсутствие авторского замысла. Готовые ассеты сделаны не для вашей игры, у всех них наверняка разный стиль. Если объединить их в одну игру, не приводя к общему виду, у игроков возникнет чувство негармоничности, что будет только отталкивать.

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

Во-вторых, потратьте время на перебор ассетов. Хорошо проверьте, подходит ли он вам. Если подходит не очень — лучше подобрать другой. В будущем это окупится.

В-третьих, проверяйте лицензию перед использованием. И не скачивайте ничего с торрентов.

В-четвёртых, если у вас есть такая возможность — будьте готовы выделить время для адаптации ассетов под свои нужды. Изучите для этого необходимое ПО.

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

В последнее время в сети появляется много генераторов, особенно на основе нейронных сетей. Технологии поражают! Вы можете использовать поисковики для того, чтобы их найти, например с помощью запросов «sound generator» или «planet generator». Не для всего есть варианты, но выбор есть.

Если генератора нет, всё ещё можно использовать старые добрые фильтры. Для картинок это различные визуальные эффекты, которых полно в Photoshop. Для звуков это аудио-эффекты, которых полно в Audacity. Модели можно пересобрать использовать различные инструменты в Blender.

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

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

Вы также можете обратиться в поисковик с запросом «редактор аудио/изображений/моделей» или «model/art/audio editor», есть много опций, доступных прямо в браузере. И помните про генераторы! Ищите, обязательно ищите, это не так сложно, как кажется.

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

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

Подготовьте рабочее окружение согласно c инструкциями главы “Подготовка окружения”, если это ещё не сделано.

Рабочее окружение работало, но перестало? Инструкции из этой главы не работают? Может помочь:

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

Результат успешного выполнения команды:

При возникновении проблем обратитесь к документации Docker для их устранения.

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

Результат успешного выполнения команды:

При возникновении проблем обратитесь к документации Docker для их устранения.

Убедимся, что Docker запустился:

Результат выполнения команды, если Docker успешно запущен:

Теперь проверим, что Docker доступен и корректно настроен:

Результат успешного выполнения команды:

При возникновении проблем обратитесь к документации Docker для их устранения.

Запустим кластер minikube, уже настроенный в начале главы “Подготовка окружения”:

Выставим Namespace по умолчанию, чтобы не указывать его при каждом вызове kubectl :

Результат успешного выполнения команды:

Убедитесь, что вывод команды содержит строку:

Если её нет, значит был создан новый кластер minikube вместо использования старого. В таком случае повторите установку рабочего окружения с minikube с самого начала.

Теперь запустите команду в фоновом PowerShell-терминале и не закрывайте его:

Запустим кластер minikube, уже настроенный в начале главы “Подготовка окружения”:

Выставим Namespace по умолчанию, чтобы не указывать его при каждом вызове kubectl :

Результат успешного выполнения команды:

Убедитесь, что вывод команды содержит строку:

Если её нет, значит был создан новый кластер minikube вместо использования старого. В таком случае повторите установку рабочего окружения с minikube с самого начала.

Если вы непреднамеренно удалили Namespace приложения, то необходимо выполнить следующие команды, чтобы продолжить прохождение руководства:

Результат успешного выполнения команды:

Если ничего не помогло, то пройдите главу “Подготовка окружения” с начала, подготовив новое окружение с нуля. Если и это не помогло, тогда, пожалуйста, расскажите о своей проблеме в нашем Telegram или оставьте Issue на GitHub, и мы обязательно вам поможем.

Подготовка репозитория

Обновим существующий репозиторий с приложением:

Выполним следующий набор команд в PowerShell:

Выполним следующий набор команд в Bash:

Не работает? Попробуйте инструкции на вкладке “Начинаю проходить руководство с этой главы” выше.

Подготовим новый репозиторий с приложением:

Выполним следующий набор команд в PowerShell:

Выполним следующий набор команд в Bash:

Добавление страницы /image в приложение

Добавим нашему приложению новый endpoint /image , который будет отдавать страницу, использующую набор статических файлов. Для сборки JS-, CSS- и медиафайлов будем использовать Webpacker (без Sprockets).

Сейчас наше приложение представляет собой простой API без адекватных средств управления статичными файлами и frontend-кодом. Чтобы сделать из этого API простое веб-приложение, мы сгенерировали скелет нового Rails-приложения, но без ранее использованных флагов --api и --skip-javascript :

ОБРАТИТЕ ВНИМАНИЕ! Эту команду и нижеследующие не нужно выполнять, здесь мы просто рассказываем, как получили приложение, которое используется в примере. К выполнению предназначена глава “Проверка”.

Из этого скелета мы позаимствовали всё, что связано с управлением JS-кодом и статическими файлами. Основные изменения, сделанные в нашем приложении:

  1. Добавление webpacker в Gemfile.
  2. Создание стандартных конфигурационных файлов Webpacker:
  3. Создание набора директорий для размещения исходных статических файлов:

Теперь добавим шаблон HTML-страницы, которая будет доступна по адресу /image и отображать кнопку Get image:

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

Также на странице будет использоваться CSS-файл app/javascript/styles/site.css.

JS-файл, CSS-файл и SVG-картинка будут собраны с Webpack и доступны по адресу /packs/. :

import Rails from "@rails/ujs" import "src/image.js" import "styles/site.css" Rails.start()

Обновим контроллер и маршруты, добавив в них новый endpoint /image , обрабатывающий созданный выше HTML-шаблон:

class ApplicationController < ActionController::Base def image render template: "layouts/image" end def ping render plain: "pong\n" end end

Приложение обновлено: теперь, в дополнение к уже знакомому по прошлым главам /ping , у приложения есть новый endpoint /image . На последнем отображается страница, использующая для работы разные типы статических файлов.

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

Организация раздачи статических файлов

По умолчанию в production-окружениях Rails даже не пытается раздавать статические файлы самостоятельно. Вместо этого разработчики Rails предлагают использовать для их раздачи reverse proxy, наподобие NGINX. Рекомендуется это потому, что производительность и эффективность reverse proxy для раздачи статических файлов на порядки выше, чем у Rails и Puma.

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

Есть несколько способов, как закрыть application server за reverse proxy в Kubernetes. Мы будем использовать распространенный и простой способ, который, тем не менее, хорошо масштабируется. В нем перед каждым Rails/Puma-контейнером поднимается NGINX-контейнер (в том же Pod), через который в Rails/Puma проксируются все запросы, кроме запросов на статические файлы. Статические файлы отдаёт сам NGINX-контейнер, доставая их из своей файловой системы.

Приступим к непосредственной реализации.

Обновление сборки и деплоя

Начнём с реорганизации сборки приложения. Теперь нам требуется собрать не только образ с Rails и Puma, но и образ с NGINX, где должны находиться статические файлы приложения, которые NGINX сможет сразу отдать клиенту:

Во время сборки в образ с NGINX будет добавлен его конфигурационный файл:

Обновим конфигурацию werf.yaml , чтобы werf собрал и сохранил два образа (backend, frontend) вместо одного:

project: werf-guide-app configVersion: 1 --- image: backend dockerfile: Dockerfile target: backend --- image: frontend dockerfile: Dockerfile target: frontend

Добавим новый NGINX-контейнер в Deployment приложения:

apiVersion: apps/v1 kind: Deployment metadata: name: werf-guide-app spec: replicas: 1 selector: matchLabels: app: werf-guide-app template: metadata: labels: app: werf-guide-app spec: imagePullSecrets: - name: registrysecret containers: - name: backend image: << .Values.werf.image.backend >> command: ["bundle", "exec", "rails", "server"] ports: - containerPort: 3000 env: - name: RAILS_ENV value: production - name: frontend image: << .Values.werf.image.frontend >> ports: - containerPort: 80

Теперь Service и Ingress должны обращаться на 80-й порт, а не 3000-й, чтобы все запросы шли через NGINX, а не напрямую на Rails/Puma:

Читайте также: