Mechanogurus Header

Как удалить запись организации в Zammad (self-hosted, Ubuntu 22.04)

В Zammad версии 6.x (включая 6.5.x) в веб-интерфейсе нет прямой кнопки “Удалить организацию”. Даже если организация неактивна и не содержит пользователей, UI позволяет лишь отключить её (active = false), но не удалить физически из базы данных.

В этой статье показан рабочий и безопасный способ удаления неактивных организаций через SSH и Rails-консоль, протестированный на self-hosted Zammad, установленном на Ubuntu 22.04 (не Docker).

Когда это необходимо

Удаление организаций через консоль может понадобиться, если:

  • накопилось большое количество тестовых / ошибочных организаций;
  • организации были созданы автоматически (формы, интеграции, n8n);
  • у организации 0 пользователей и 0 активных связей;
  • вы хотите “почистить” базу перед продакшен-запуском.

⚠️ Важно: действия ниже необратимы. Рекомендуется сделать резервную копию базы данных.

Предварительные условия

  • Zammad установлен не в Docker
  • ОС: Ubuntu 22.04
  • Есть SSH-доступ к серверу
  • Пользователь zammad существует
  • Вы работаете с правами sudo

Шаг 1. Подготовка окружения и прав

Перейдём в каталог Zammad и убедимся, что права на bundle и vendor корректны:

cd /opt/zammad

sudo chown -R zammad:zammad /opt/zammad/.bundle /opt/zammad/vendor 2>/dev/null || true

Шаг 2. Очистка возможных “битых” кешей Bundler (безопасно)

Иногда Rails-консоль не стартует из-за невыкачанных git-зависимостей. Очистим кеши:

sudo -u zammad -H bash -lc 'rm -rf /opt/zammad/vendor/bundle/ruby/*/bundler/gems/omniauth-weibo-oauth2-* 2>/dev/null || true'
sudo -u zammad -H bash -lc 'rm -rf /opt/zammad/vendor/bundle/ruby/*/cache/bundler/git/omniauth-weibo-oauth2-* 2>/dev/null || true'
sudo -u zammad -H bash -lc 'rm -rf /opt/zammad/.bundle/cache/bundler/git/omniauth-weibo-oauth2-* 2>/dev/null || true'

Шаг 3. Установка зависимостей Bundler (через встроенный Ruby Zammad)

Zammad использует собственный Ruby, поэтому системный ruby не нужен.

cd /opt/zammad
sudo -u zammad -H bash -lc '
export PATH=/opt/zammad/bin:/opt/zammad/vendor/ruby-3.2.8/bin:$PATH
export RAILS_ENV=production
ruby /opt/zammad/bin/bundle config set --local path vendor/bundle
ruby /opt/zammad/bin/bundle install --without test development --jobs 4
'


Шаг 4. Запуск Rails-консоли Zammad

cd /opt/zammad
sudo -u zammad -H bash -lc '
export PATH=/opt/zammad/bin:/opt/zammad/vendor/ruby-3.2.8/bin:$PATH
export RAILS_ENV=production
ruby /opt/zammad/bin/bundle exec rails c
'

Вы увидите приглашение:

Loading production environment (Rails ...)
pry(main)>

Шаг 5. Проверка неактивных организаций

Сначала проверяем, что именно будет удалено.

Количество неактивных организаций

Organization.where(active: false).count


Список ID и названий

Organization.where(active: false).pluck(:id, :name)


Дополнительно: убедимся, что нет пользователей

inactive = Organization.where(active: false)
inactive.map { |o| [o.id, o.name, o.members.count] }

Рекомендуемое состояние перед удалением:

  • active = false
  • members.count = 0

Шаг 6. Удаление организаций

Если список корректный — выполняем удаление:

inactive.each do |o|
  puts "Deleting ##{o.id} #{o.name}"
  o.destroy!
end

destroy! используется намеренно — он выбросит ошибку, если есть блокирующие связи.

Шаг 7. Финальная проверка

Organization.where(active: false).count

Ожидаемый результат: “0”

Шаг 8. Выход из консоли

exit

Частые ошибки и советы

❌ SyntaxError в 

pry

Возникает при вставке мусора (shell-команд, |, ~, логов).

Решение: выйти (exit) и зайти заново.

❌ NameError: undefined local variable

Вызываете org.destroy! без предварительного присваивания переменной.

⚠️ Организация не удаляется

Чаще всего:

  • есть связанные пользователи;
  • есть активные тикеты;
  • кастомные валидации.

В этом случае нужно анализировать конкретную ошибку.

Итог

Хотя Zammad не позволяет удалять организации через UI, self-hosted установка даёт полный контроль через Rails-консоль. Описанный выше метод:

  • безопасен при соблюдении условий;
  • подходит для production;
  • протестирован на Ubuntu 22.04;
  • не требует Docker или system Ruby.

Leave a Reply

Your email address will not be published. Required fields are marked *

No comments to show.