Почему мои новые пользователи в SonarQube создаются с параметром active=NULL?

Я только что установил SonarQube 4.5, подключенный к базе данных Postgres.

Кажется, что все работает нормально в отношении анализа кода, но когда я создаю новых пользователей либо через экран настроек, либо через форму регистрации, пользователь создается с 'active' установленным на null в базу данных. Если я обновлю 'active' до true вручную, я смогу использовать нового пользователя, и все будет хорошо.

Столбец 'active' в 'users' по умолчанию имеет значение true.

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

Я не знаю точно, связано ли это с чем-либо, но вот процесс, через который я прошел, чтобы запустить SonarQube:

В начале процесса начальной загрузки Rails, по-видимому, смог найти таблицу 'schema_migrations' из одной из других схем, но затем, когда он попытался выбрать из 'schema_migrations' ( в правильной схеме) он не смог найти его, поэтому было выдано исключение, и установка базы данных была прервана. Итак, я создал таблицу 'schema_migrations' в своей схеме с одним столбцом "версия", перезапустил Sonar, и теперь он находился в состоянии, когда он думал, что выполняет обновление версии, и запускал базу данных. миграция.

Не удалось выполнить перенос в '011_create_administrator.rb', так как он пытался вставить NULL в столбец 'active' 'users', и этот столбец еще не был создан. Итак, я вручную запустил вставку без части 'active', обновил 'schema_migrations.version' до 11 и перезапустил.

Миграция началась снова и завершилась ошибкой в ​​'530_merge_measure_data_into_project_measures.rb' с

"Fail to execute database migration: org.sonar.server.db.migrations.v44.MeasureDataMigration
org.postgresql.util.PSQLException: ERROR: column m.measure_data does not exist."

Итак, я добавил столбец 'measure_data' в 'project_measures' и перезапустил. Теперь миграция успешно завершена, SonarQube запустился нормально, и я смог войти в систему как администратор и приступить к анализу кода.


person David Snyder    schedule 04.03.2015    source источник


Ответы (2)


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

Поэтому я бы посоветовал вам перезапустить с нуля:

  • Отбросьте свою схему в Postgres и создайте новую с доступом, предоставленным пользователю «sonar».
  • Запустите SQ на этой новой схеме
  • И все должно работать нормально
person Fabrice - SonarSource Team    schedule 05.03.2015
comment
Может быть, они должны были, но они не сделали этого в этом случае. - person David Snyder; 05.03.2015
comment
Если вы начинаете с новой установки SonarQube и новой БД Postgres, то вы должны что-то упустить, потому что у нас есть интеграционные тесты, которые выполняются на Postgres каждый день и начинаются с новой БД. - person Fabrice - SonarSource Team; 05.03.2015
comment
Поддерживается ли конфигурация с несколькими независимыми экземплярами SonarQube, использующими одну и ту же базу данных Postgres, но с разными схемами? И да, у меня правильно установлен путь поиска в соответствии с документацией. - person David Snyder; 05.03.2015
comment
1 экземпляр SonarQube = 1 БД. Кластеризация будет поддерживаться в ближайшей функции, см. jira.codehaus.org/browse/SONAR-5391. - person Fabrice - SonarSource Team; 06.03.2015
comment
Спасибо, но я не спрашивал о кластеризации. Это полностью независимые экземпляры, но они используют один и тот же сервер базы данных. Но у каждого экземпляра есть свой пользователь и схема в базе данных, путь поиска задан правильно, и каждый пользователь имеет права только на свою собственную схему. - person David Snyder; 06.03.2015

Правильный ответ, вероятно, состоит в том, чтобы создать выделенную базу данных для использования SonarQube, но тем временем я работал над проблемой, используя этот триггер:

CREATE FUNCTION activate_user() RETURNS trigger as $activate_user$
    BEGIN
        IF (NEW.active IS NULL) THEN
            NEW.active := true; 
        END IF;

        RETURN NEW;
    END;    
$activate_user$ LANGUAGE plpgsql;

CREATE TRIGGER activate_user_trigger BEFORE INSERT on fst_sonar.users
    FOR EACH ROW EXECUTE PROCEDURE activate_user();

    commit;
person David Snyder    schedule 06.03.2015