Я экспериментирую с запуском Discourse на инстансах AWS на базе Graviton, так как они привлекательны с точки зрения цены. Я понимаю, что поддержка aarch64 находится в экспериментальной стадии, но сообщение о сборке предлагает сообщать о проблемах, поэтому я пишу об этом. Думаю, многие используют Discourse в AWS, поэтому, надеюсь, это может быть полезно и другим.
Мне удалось запустить существующую установку на arm64 после пересборки и проведения базовой проверки работоспособности, чтобы убедиться, что фронтенд загружается. Однако команда ./launcher logs web_only показывает, что файл rails.stderr.log постоянно заполняется следующими сообщениями:
ERROR: ld.so: object '/usr/lib/libjemalloc.so.1' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/usr/lib/libjemalloc.so.1' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
Действительно, на arm64 файла /usr/lib/libjemalloc.so.1 нет, в отличие от образов x86_64, зато присутствует /usr/lib/libjemalloc.so.2. Я проследил причину различия версий на arm64 до этого:
К слову, спасибо за качественную документацию этого изменения.
Полагаю, сообщение об ошибке возникает из-за явного указания несуществующего /usr/lib/libjemalloc.so.1 здесь:
Быстрое и не очень элегантное переопределение переменной $RUBY_ALLOCATOR в файле templates/web.template.yml, похоже, успешно устранило сообщение об ошибке. Таким образом, Rails (Puma?) теперь, вероятно, работает с правильной библиотекой libjemalloc.
Тем не менее, я не знаю, потребует ли правильное исправление большего количества изменений и не повлекут ли такие изменения других последствий для производственных систем. Всё же хотел поделиться этим на случай, если это затронет других, пытающихся использовать Discourse с arm64 в AWS. Возможно, команде Discourse стоит также взглянуть на это?