В 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!
enddestroy! используется намеренно — он выбросит ошибку, если есть блокирующие связи.
Шаг 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